Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste
SQL - Query
#1
Hallo werte Wissenden!
Da ich auf dem Gebiet noch Nachholbedarf habe, eine Frage:
Was ist hier richtig, bzw. ist überhaupt etwas richtig? Big Grin 

1.
Code:
update mybb_users set allownotices =1 where usergroup =X and allownotices =0;
2.
Code:
update mybb_users set allownotices =1 where gid =X and allownotices =0;

Danke für Infos!
Zitieren
#2
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. Wink  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  Big Grin

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
SET allownotices = 1;

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 Wink 

Also immer mit where-Klausel:

Code:
UPDATE mybb_users
SET allownotices = 1
WHERE usergroup = X AND allownotices = 0;

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
SET
WHERE

.. anschließend füllst du diese Werte. Dann vergisst du die WHERE-Klausel garantiert nicht! Wink

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.
Zitieren
#3
(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?  Wink
(18.02.2020, 20:17)itsmeJAY schrieb: Wenn du dir gerade SQL anguckst....
https://www.sqlstyle.guide/de/#abfragesyntax
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.  Big Grin

Danke !

______________________________________
edit:
Danke, Du warst mit der Erklärung schneller, als ich mit der Antwort/Frage. Big Grin
Zitieren
#4
(18.02.2020, 20:17)itsmeJAY schrieb: Hi Schnapsnase,

das sollte beides klappen. Wieso sollte deiner Meinung nach ein Query falsch sein?

Weil es "gid" in mybb_users nicht gibt.  Toungue
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.
Zitieren
#5
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?  Wink

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.  Big Grin

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.
Zitieren
#6
Soweit verstanden.
Herzlichen Dank für die Ausführlichkeit! Wink
Zitieren
#7
(18.02.2020, 20:42)doylecc schrieb: Weil es "gid" in mybb_users nicht gibt.  Toungue
Darum funktioniert nur die erste.

Ich dachte es gänge ihm nur um die Syntax. Ich habe mich synchron zu deinem Beitrag korrigiert Big Grin
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Realisierung einer komplexen MySQL Query Riccardo 2 2.263 14.07.2009, 18:53
Letzter Beitrag: Riccardo
  2 Tabellen in einem Query Waluigi 8 3.793 14.07.2009, 00:27
Letzter Beitrag: Michael
  Optimale MySQL Query zur Erfassung von Themen Inhalten in einem Unterforum XY Riccardo 4 3.034 23.06.2009, 00:43
Letzter Beitrag: Riccardo
  [Gelöst]MYSQL Fehler in UPDATE Query Jan 3 2.689 27.02.2007, 15:52
Letzter Beitrag: Jan