SQL - Query - Druckversion +- MyBB.de Forum (https://www.mybb.de/forum) +-- Forum: Sonstiges (https://www.mybb.de/forum/forum-1.html) +--- Forum: Programmierung (https://www.mybb.de/forum/forum-32.html) +--- Thema: SQL - Query (/thread-37033.html) |
SQL - Query - Schnapsnase - 18.02.2020 Hallo werte Wissenden! Da ich auf dem Gebiet noch Nachholbedarf habe, eine Frage: Was ist hier richtig, bzw. ist überhaupt etwas richtig? 1. Code: update mybb_users set allownotices =1 where usergroup =X and allownotices =0; Code: update mybb_users set allownotices =1 where gid =X and allownotices =0; Danke für Infos! RE: SQL - Query - itsmeJAY - 18.02.2020 Hi Schnapsnase, das sollte beides klappen. Wieso sollte deiner Meinung nach ein Query falsch sein? In dem einen fragst du halt die gid ab und in dem anderen die usergroup. Übrigens kann das AND wegfallen. Der Query sagt doch, dass bei allen Benutzern allownotice auf 1 gesetzt werden soll, bei denen es jetzt gerade auf 0 steht. Da die Spalte nur den Wert 1 und 0 annehmen kann, macht es also keinen Unterschied, ob das "AND" wegfällt oder nicht. In der Zeit wo du das "AND ...." hinschreibst, wäre der Query schon durchgelaufen. Bedeutet: Fällt das AND weg, ist das Schlimmste was passieren kann: Die Datenbank macht bei Benutzern allownotice zu 1 bei denen es sowieso bereits auf 1 steht Wichtig ist auch: Vergiss bei einem Update-Befehl in SQL niemals die "where"-Klausel. Viele führen den Befehl zu schnell aus! Code: UPDATE mybb_users würde z. B. bedeuten, das bei ALLEN Benutzern (allen Datensätzen in mybb_users) allownotices auf 1 gesetzt wird. Hast du kein Backup vorher gemacht, wird es etwas schwierig nachzuvollziehen, wie der Zustand vorher war. Das ist bei "allownotices" vielleicht halb so wild, aber stell dir mal eine Datenbank vor, in der Kundendaten gepflegt werden und du überschreibst eine Konto-Nr. ohne where-Klausel Also immer mit where-Klausel: Code: UPDATE mybb_users Am besten merkst du dir: Sobald du einen Update-Befehl ausführen willst, schreibst du erstmal die Schlüsselwörter hin und füllst anschließend aus! Also z. B erstmal hinschreiben: Code: UPDATE .. anschließend füllst du diese Werte. Dann vergisst du die WHERE-Klausel garantiert nicht! Wenn du dir gerade SQL anguckst. Hier nochmal eine schnelle und leicht verständliche Info. Die gute alte Konvention: https://www.sqlstyle.guide/de/#abfragesyntax Zitat:Verwenden Sie immer Großbuchstaben für reservierte Schlüsselwörter wie SELECT und WHERE. RE: SQL - Query - Schnapsnase - 18.02.2020 (18.02.2020, 20:17)itsmeJAY schrieb: Sollte beides klappen. Wieso sollte deiner Meinung nach eines falsch sein?Woher kann ich wissen, ob "usergroup" oder "gid" oder beides richtig ist? (18.02.2020, 20:17)itsmeJAY schrieb: Übrigens kann das AND wegfallen. Du setzt allownotice sowieso auf 1...Soll heißen: Es ist überflüssig, da es eh nur zwei Optionen gibt? (18.02.2020, 20:17)itsmeJAY schrieb: Wenn du dir gerade SQL anguckst....Verbindlichsten Dank! (18.02.2020, 20:17)itsmeJAY schrieb: Verwenden Sie immer Großbuchstaben für reservierte Schlüsselwörter wie SELECT und WHERE.Es wird leider nicht erklärt warum und ich bin wissbegierig. Danke ! ______________________________________ edit: Danke, Du warst mit der Erklärung schneller, als ich mit der Antwort/Frage. RE: SQL - Query - doylecc - 18.02.2020 (18.02.2020, 20:17)itsmeJAY schrieb: Hi Schnapsnase, Weil es "gid" in mybb_users nicht gibt. Darum funktioniert nur die erste. Damit bekommst du aber nur die primären Benutzergruppen. Wenn du auch sekundäre abfragen willst, musst du auch die Spalte "additionalgroups" berücksichtigen. RE: SQL - Query - itsmeJAY - 18.02.2020 Während du deine Antwort gepostet hast, habe ich meine erste Antwort bearbeitet gehabt. Eventuell gibt es dort Informationen, die du nicht gelesen hast. (18.02.2020, 20:39)Schnapsnase schrieb: Woher kann ich wissen, ob "usergroup" oder "gid" oder beides richtig ist? Bevor du den Query abschickst, musst du dir natürlich Gedanken machen, was genau du dort machen willst. Die Spalte "gid" gibt es in der Tabelle mybb_users nicht (Somit habe ich mich vertan und dein 2. Query würde nicht funktionieren! Ich dachte es ging dir in der Fragestellung rein um die Syntax!). Das siehst du ganz einfach im phpmyadmin indem du dir die entsprechende Tabelle links in der Navigation aufrufst - oder folgenden Query ausführst: Code: SELECT * FROM mybb_users; Dort siehst du, dass es keine Spalte "gid" gibt. Das bedeutet, dass SQL die Tabelle mybb_users nicht updaten kann, weil die "gid" nicht gefunden wird und somit deine "Aussage" in der Abfrage nicht zutreffen kann (schlichtweg, weil gid nicht existiert in der Tabelle die du updaten willst). gid existiert in der Tabelle mybb_usergroups und ist der eindeutige Schlüssel einer Benutzergruppe. Bedeutet: Die Benutzergruppe "Administrators" hat z. B. die gid "4". Wenn ein Benutzer in mybb_users nun Administrator ist, steht dort in der Spalte "usergroup" die ID "4" drin. Damit weiß PHP später (oder theor. auch SQL), dass der Benutzer zur Gruppe "4" gehört und somit kann PHP in mybb_usergroups gucken und sehen, dass "4" = Administratoren sind und im Forum die entsprechenden Rechte zuweisen. (18.02.2020, 20:39)Schnapsnase schrieb: Soll heißen: Es ist überflüssig, da es eh nur zwei Optionen gibt? Richtig. Wenn die Spalte mehrere Zustände annehmen könnte, z. B. 1, 2, 3, 4, 5 - dann wäre die AND-Anweisung sinnvoll. Ist aber nicht schlimm, wenn du die AND-Anweisung hinzufügst. (18.02.2020, 20:39)Schnapsnase schrieb: Verbindlichsten Dank! Gerne. (18.02.2020, 20:39)Schnapsnase schrieb: Es wird leider nicht erklärt warum und ich bin wissbegierig. Es ist nur eine Konvention. Es klappt natürlich auch mit kleinen Buchstaben und wird auch oft zu Testzwecken benutzt. Im produktiven Einsatz (z.B. in PHP Dateien) werden die Schlüsselwörter "SELECT, UPDATE, SET, WHERE, etc" immer groß geschrieben. Dies dient der Übersicht. Ausnahmen bestätigen hier die Regeln. RE: SQL - Query - Schnapsnase - 18.02.2020 Soweit verstanden. Herzlichen Dank für die Ausführlichkeit! RE: SQL - Query - itsmeJAY - 18.02.2020 (18.02.2020, 20:42)doylecc schrieb: Weil es "gid" in mybb_users nicht gibt. Ich dachte es gänge ihm nur um die Syntax. Ich habe mich synchron zu deinem Beitrag korrigiert |