PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sekundäre Benutzergruppe->Primäre Benutzergruppe


von7thal
17.05.2005, 23:44
hallo miteinander
ich habe einige benutzer in einer benutzergruppe. bei allen ist die mitgliedschaft als zusätzliche benutzergruppe gespeichert. ich möchte nun alle mitglieder dieser benutzergruppe befördern. sie sollen alle in eine neue primäre benutzergruppe verschoben werden. soviel ich weiss gibt es dies nicht als beförderungskriterium. hat vielleicht jemand irgend ein query mit dem dies möglich ist? ich benutze momentan vb 3.0.4.
danke im voraus
von7thal

Netware
18.05.2005, 02:16
update user set usergroupid = "neueprimäre", membergroupid = "" where membergroupid = "sekundäregruppe_die_befördert_werden_soll"

von7thal
18.05.2005, 21:05
danke für die antwort jedoch scheint der befehl nicht zu funktionieren. es kommt immer folgende fehlermeldung:
MySQL meldet: Dokumentation
#1054 - Unknown column 'membergroupid' in 'where clause'

muss zwischen den "" nach membergroupid = nicht noch irgendwas stehen?

Mystics
18.05.2005, 21:33
Probiere es mit:

UPDATE user SET usergroupid = "neueprimäre", membergroupids = "" where membergroupids = "sekundäregruppe_die_befördert_werden_soll";

Klappt aber nicht, wenn diese Benutzer mehr als eine zusätzliche Benutzergruppe haben.

von7thal
19.05.2005, 12:34
dann wird auch das nicht funktionieren:(
alle benutzer sind noch in mindestens 2 zusätzlichen benutzergruppen

Hoffi
19.05.2005, 17:05
OK... dann wird es deutlich komplexer oder ein Script muss her.

Lass mal überlegen. Ist nur ein Gedankengang...

Nee. Das geht so nicht... da wären alle Sekundären weg... die Sekundäre rausziehen muss ich mal sehen.


UPDATE user SET usergroupid = "neueprimäre", membergroupids = "" where "sekundäregruppe_die_befördert_werden_soll" IN CONCAT("(", membergroupids, ")");

Mystics
19.05.2005, 22:14
Dann so:

UPDATE user SET usergroupid = X, membergroupids = REPLACE(membergroupids, 'Y,', '') WHERE INSTR(membergroupids, 'Y,');
und:
UPDATE user SET usergroupid = X, membergroupids = REPLACE(membergroupids, ',Y', '') WHERE INSTR(membergroupids, ',Y');

X = Neue primäre ID
Y = Alte zusätzliche ID

Hoffi
20.05.2005, 15:00
Das funktioniert leider nicht Mystics.
Denn:
Wäre die alte Benutzergruppe 7 und in der Spalte membergroupids steht folgendes (17,3) wäre die Bedingung in der erste Zeile richtig, sollte aber nicht richtig sein. Das war auch meine erste Idee. Selbes gilt für den Replace.
Und auch für Gruppe 2 wäre in der zweiten Zeilt die WHERE Bedingung richtig im Falle von "1,3,21".

Nein, so leider auch nicht.

Mystics
20.05.2005, 21:13
Na gut, wo du Recht hast :)

Für die Bedingung würde es mit FIND_IN_SET('Y', membergroupids) funktionieren, jedoch nicht für das REPLACE.

Dann eben extrem umständlich:

UPDATE user SET usergroupid = X, membergroupids = REPLACE(membergroupids, ',Y,', ',') WHERE INSTR(membergroupids, ',Y,');
UPDATE user SET usergroupid = X, membergroupids = SUBSTRING(membergroupids, 3) WHERE LEFT(membergroupids, 2) = 'Y,';
UPDATE user SET usergroupid = X, membergroupids = LEFT(membergroupids, LENGTH(membergroupids) - 2) WHERE RIGHT(membergroupids, 2) = ',Y';

Wenn die zusätzliche Benutzergruppe zweistellig ist (ID größer als 9), muss die Zahl (2 bzw. 3) jeweils um 1 erhöht werden:

UPDATE user SET usergroupid = X, membergroupids = REPLACE(membergroupids, ',Y,', ',') WHERE INSTR(membergroupids, ',Y,');
UPDATE user SET usergroupid = X, membergroupids = SUBSTRING(membergroupids, 4) WHERE LEFT(membergroupids, 3) = 'Y,';
UPDATE user SET usergroupid = X, membergroupids = LEFT(membergroupids, LENGTH(membergroupids) - 3) WHERE RIGHT(membergroupids, 3) = ',Y';

Aber da sich von7thal nicht mehr gemeldet hat, ist das wohl sowieso hinfällig :)

von7thal
21.05.2005, 14:39
ich war weg übers wochenende und war deshalb nicht online. danke vielmals für eure bemühungen. werde es gleich mal ausprobieren.

von7thal
22.05.2005, 01:55
sorry
komme aber nicht ganz draus. die zusätzliche benutzergruppe hat bei mir die ID-Nummer "50". die künftige primäre gruppe die nummer "60".

Hoffi
22.05.2005, 10:27
Dann nimm folgende Querys um die Sekundäre rauszuwerfen.

UPDATE user SET usergroupid = 60, membergroupids = REPLACE(membergroupids, ',50,', ',') WHERE INSTR(membergroupids, ',50,');
UPDATE user SET usergroupid = 60, membergroupids = SUBSTRING(membergroupids, 4) WHERE LEFT(membergroupids, 3) = '50,';
UPDATE user SET usergroupid = 60, membergroupids = LEFT(membergroupids, LENGTH(membergroupids) - 3) WHERE RIGHT(membergroupids, 3) = ',50';


Und noch die Variante falls doch einer NUR die eine als Sekundäre hat.


UPDATE user SET usergroupid = 60, membergroupids = 50 WHERE membergroupids = '50';


Dann sollte es passen.

von7thal
22.05.2005, 12:12
judihui hat funktioniert. so blöd wie ich jedoch war hab ich doch tatsächlich vergessen das nun ich und alle morderatoren nun in dieser primären benutzergruppe sind. das query kann man nicht zufälliger weise rückgängig machen? soviel ich weiss eben nicht....werde dann wohl alles in der datenbank ändern müssen. danke nochmals an alle.

EDIT: wäre es eventuell möglich noch zu definieren das die benutzer der folgenden primären benutzergruppen nicht befördert werden? (6,7,5,46,52,51,58)

Mystics
22.05.2005, 14:49
Schreibe vor dem Strichpunkt (;) noch jeweils:

AND usergroupid NOT IN (6,7,5,46,52,51,58)

von7thal
22.05.2005, 18:51
könnte man das ganz vielleicht noch zu einer zeitbasierenden aufgabe machen? also zu den aufgaben die es zum beispiel alle 20 min macht.

Mystics
22.05.2005, 19:11
Schreib die Querys halt z.B. in die includes/cron/promotion.php dazu.