Ich versuche zu verstehen, wie man mehrere Zeilen mit unterschiedlichen Werten UPDATE und ich einfach don' t get it. Die Lösung ist überall zu finden, aber für mich scheint sie schwer zu verstehen zu sein.
Zum Beispiel, drei Updates in 1 Abfrage:
UPDATE table_users
SET cod_user = '622057'
, date = '12082014'
WHERE user_rol = 'student'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '2913659'
, date = '12082014'
WHERE user_rol = 'assistant'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '6160230'
, date = '12082014'
WHERE user_rol = 'admin'
AND cod_office = '17389551';
Ich lese ein Beispiel, aber ich verstehe wirklich nicht, wie die Abfrage zu machen. dh:
UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
Mir ist nicht ganz klar, wie man die Abfrage macht, wenn es mehrere Bedingungen im WHERE und in der IF-Bedingung gibt... irgendwelche Ideen?
Sie können es so machen:
UPDATE table_users
SET cod_user = (case when user_role = 'student' then '622057'
when user_role = 'assistant' then '2913659'
when user_role = 'admin' then '6160230'
end),
date = '12082014'
WHERE user_role in ('student', 'assistant', 'admin') AND
cod_office = '17389551';
Ich verstehe Ihr Datumsformat nicht. Datumsangaben sollten in der Datenbank unter Verwendung nativer Datums- und Zeittypen gespeichert werden.
MySQL bietet eine lesbarere Möglichkeit, mehrere Aktualisierungen in einer einzigen Abfrage zu kombinieren. Dies scheint besser zu dem von Ihnen beschriebenen Szenario zu passen, ist viel einfacher zu lesen und vermeidet diese schwer zu entwirrenden Mehrfachbedingungen.
INSERT INTO table_users (cod_user, date, user_rol, cod_office)
VALUES
('622057', '12082014', 'student', '17389551'),
('2913659', '12082014', 'assistant','17389551'),
('6160230', '12082014', 'admin', '17389551')
ON DUPLICATE KEY UPDATE
cod_user=VALUES(cod_user), date=VALUES(date)
Dabei wird davon ausgegangen, dass die Kombination "user_rol, cod_office" ein Primärschlüssel ist. Wenn nur eines der beiden Felder ein Primärschlüssel ist, dann fügen Sie das andere Feld zur UPDATE-Liste hinzu. Wenn keines der beiden Felder ein Primärschlüssel ist (was unwahrscheinlich ist), werden bei diesem Ansatz immer neue Datensätze erstellt, was wahrscheinlich nicht gewollt ist.
Dieser Ansatz macht vorbereitete Anweisungen jedoch einfacher zu erstellen und prägnanter.
Sie können eine CASE
-Anweisung verwenden, um mehrere if/then-Szenarien zu behandeln:
UPDATE table_to_update
SET cod_user= CASE WHEN user_rol = 'student' THEN '622057'
WHEN user_rol = 'assistant' THEN '2913659'
WHEN user_rol = 'admin' THEN '6160230'
END
,date = '12082014'
WHERE user_rol IN ('student','assistant','admin')
AND cod_office = '17389551';