Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.27 veröffentlicht (22.06.21)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
SQL-Befehl > Aus Zusatzgruppen entfernen
#1
Hallole,

mit diesem SQL-Befehl
PHP-Code:
$query $db->query("UPDATE mybb_users SET additionalgroups = '15,16' WHERE usergroup = '10'"); 
kann man ja mit "SET" Usern zusätzliche Gruppen zuweisen.

Mit welchem SQL-Befehl kann ich die vorstehend zugewiesenen Zusatzgruppen wieder pauschal auf "keine" setzen? Mit z.B.
PHP-Code:
$query $db->query("UPDATE mybb_users SET additionalgroups = '0' WHERE usergroup = '10'"); 

Ich frage lieber vorher, bevor ich mir etwas zerschieße und dann die vorher erstellte Datensicherung benötige.

Vorab Danke für jedwede Hilfestellung.
Jammer nicht rum ...Du musst (k/m)eine Hilfe (nicht) annehmen!
MyBB: 1.8.27 | PHP: 7.4.19 | SQL: 5.7.34
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [301] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner]
Zitieren
#2
additionalgroups ist normalerweise leer und nicht NULL Wink
Zitieren
#3
Darum fragte ich im Vorfeld einer auszuführenden Maßnahme.

Thanks for help
Jammer nicht rum ...Du musst (k/m)eine Hilfe (nicht) annehmen!
MyBB: 1.8.27 | PHP: 7.4.19 | SQL: 5.7.34
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [301] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner]
Zitieren
#4
Ein Tip, der ggf. bei solchen Fragestellungen (hier: den Wert in einer Tabelle auf den Originalzustand zurücksetzen) noch interessant sein könnte:

Ein Blick in die MyBB DB-Installation im Bereich Doku -> Crossreference und dort in die Zeile 1065 der install/ressources/mysql_db_tables.php. Man muss die Zeile nicht wissen, kann aber in der Datei nach "additionalgroups" in der Tabelle "mybb_users" suchen.
viele Grüße
Jockl
übersetzte und eigene Plugins
Zitieren
#5
Hallo,

ich habe einen Task, in welchem ich den Usern automatisch entsprechende Rechte und Zusatzgruppen etc. zuweisen kann. Neue User werden zunächst automatisch in eine Gruppe (2) zugewiesen und wenn ich dann den User in die Gruppe z.B. 4 oder 12 verschieben, läuft der Rest über den Task automatisch ab. Dies funktioniert seit Monaten problemlos.

Nun wollte ich alle User, deren Besuch (lastvisit) z.B. vor dem 01.01.2020 (
1577833199 = 31.12.2019 - 23:59:59)
war, automatisch in die Gruppe 2 zurück verschieben, aber nicht wenn der User der Gruppe 4 oder 6 zugewiesen ist. Zum Testen habe ich einen neuen Testadmin (Gruppe 4) sowie einen Testmoderator (Gruppe 6) angelegt und diese werden nach Ausführung des nachstehenden SQL-Befehls in die Gruppe 2 verschoben.

Die beiden Testaccounts haben als lastvisit definitiv eine höhere Unixzeit als das im SQL-Befehl lastvisit definiert ist.

Folgenden SQL-Befehl  habe ich verwendet:
PHP-Code:
$query $db->query("UPDATE mybb_users SET usergroup = '2' WHERE (usergroup != '4' OR usergroup != '6' OR usergroup != '12') AND lastvisit <= '1577833199'"); 
A) Ergebnis von gestern (beide Accounts neu angelegt):
> Testadmin (4) und Testmoderator (6) werden in die Gruppe 2 verschoben

B) Ergebnis von heute (Testmoderator gelöscht und neu angelegt):
> beim Testadmin (4) ändert sich nichts geändert (wie SQL-Vorgabe) und der Testmoderator (6) wird in die Gruppe 2 verschoben (wurde neu angelegt).

Nehme ich jedoch lastactive mit hinzu
PHP-Code:
$query $db->query("UPDATE mybb_users SET usergroup = '2' WHERE (usergroup != '4' OR usergroup != '6' OR usergroup != '12') AND (lastvisit <= '1577833199' AND lastactive <= '1577833199')"); 
oder anstelle lastvisit nur lastactive
PHP-Code:
$query $db->query("UPDATE mybb_users SET usergroup = '2' WHERE (usergroup != '4' OR usergroup != '6' OR usergroup != '12') AND lastactive <= '1577833199'"); 
funktioniert alles sofort genau so wie gewünscht.

Kann mir jemand etwas Licht in meine Dunkel bringen bzw. mir dieses Verhalten erklären?
Jammer nicht rum ...Du musst (k/m)eine Hilfe (nicht) annehmen!
MyBB: 1.8.27 | PHP: 7.4.19 | SQL: 5.7.34
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [301] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner]
Zitieren
#6
(25.08.2021, 16:51)Schnapsnase schrieb: additionalgroups ist normalerweise leer und nicht NULL Wink

Sorry aber das macht keinen Sinn.. Gertis query sagt 0 und nicht NULL.. und du widersprichst dir selber, denn wenn es leer ist ist es NULL. Bitte 0 mit NULL nicht gleichsetzen.

@Gerti: dein Fehler wird der OR Operator sein. Probier es halt mal mit AND. Deine Unterabfrage ergibt TRUE, was so nicht gewünscht ist.
Zitieren
#7
(05.09.2021, 00:13)itsmeJAY schrieb: Gertis query sagt 0 und nicht NULL.. und du widersprichst dir selber, denn wenn es leer ist ist es NULL.

Was soll denn dieser Blödsinn?!
Es war von mir eine (zugegeben inkorrekte) Schreibweise. Genauso gut hätte ich "0" oder "Null" schreiben können.
Ich wollte Gerti lediglich etwas deutlicher machen, was ich meine.

Ich werde aber künftig erst Deine Antworten abwarten, bevor ich mich hier noch zu irgendwas außere. Rolleyes
Zitieren
#8
Er hat durchaus Recht, NULL bezeichnet in der Informatik einen speziellen leeren Wert, der gerade nicht der Zahl 0 entspricht: https://de.m.wikipedia.org/wiki/Nullwert
Dies spielt insbesondere bei Datenbanken eine besondere Rolle, hier kann bei jeder einzelnen Spalte festgelegt werden, ob sie NULL werden kann oder nicht (NOT NULL). Anders als bei PHP, das Datentypen automatisch umwandeln kann, werden beide Werte bei MySQL strikt unterschieden.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#9
Meine Frage lautet:
(25.08.2021, 16:19)Gerti schrieb: Mit welchem SQL-Befehl kann ich die vorstehend zugewiesenen Zusatzgruppen wieder pauschal auf "keine" setzen? Mit z.B.
PHP-Code:
$query $db->query("UPDATE mybb_users SET additionalgroups = '0' WHERE usergroup = '10'"); 
Die Antwort lautete:
(25.08.2021, 16:51)Schnapsnase schrieb: additionalgroups ist normalerweise leer und nicht NULL Wink
was somit
PHP-Code:
$query $db->query("UPDATE mybb_users SET additionalgroups = '' WHERE usergroup = '10'"); 
ergibt.

Daraus entstand eine Diskussion bzgl. "Null" (= '') oder '0' welche für mich als Endanwender (möchte lediglich den korrekten SQL-Befehl in einem Task einsetzen) trotz des Hinweises von StefanT nicht so ganz verstehe, dies insbesondere weil Schnapsnase nunmehr schrieb:
Zitat:Es war von mir eine (zugegeben inkorrekte) Schreibweise. Genauso gut hätte ich "0" oder "Null" schreiben können.
womit wir wieder bei meinen obigen ersten SQL-Befehl wären.

Ist jetzt
PHP-Code:
$query $db->query("UPDATE mybb_users SET additionalgroups = '0' WHERE usergroup = '10'"); 
oder
PHP-Code:
$query $db->query("UPDATE mybb_users SET additionalgroups = '' WHERE usergroup = '10'"); 
richtig?
Gehe ich schlußfolgernd korrekt in der Annahme, dass '0' verwendet werden muss?




(05.09.2021, 00:13)itsmeJAY schrieb: @Gerti: dein Fehler wird der OR Operator sein. Probier es halt mal mit AND. Deine Unterabfrage ergibt TRUE, was so nicht gewünscht ist.
Mit AND funktioniert es! Nach langem Grübeln (es wollte mir nicht einleuchten warum OR nicht funktionert) ist mir die Logik so gaaanz langsam etwas schlüssig.
Jammer nicht rum ...Du musst (k/m)eine Hilfe (nicht) annehmen!
MyBB: 1.8.27 | PHP: 7.4.19 | SQL: 5.7.34
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [301] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner]
Zitieren
#10
Gerti,

die zweite Variante ist richtig.
Sorry für die Verwirrung. Ich wollte hier keine Lawine lostreten, sondern mit meiner inkorrekten Schreibweise "NULL" nur auf deine "0" im Query hinweisen, die so nicht Korrekt war. Wink
Zitieren