SQL von SELECT zu UPDATE

Alles, was nicht in die anderen Foren passt, kannst du hier loswerden.
Antworten
voumi
Beiträge: 14
Registriert: 26. Jan 2020, 18:51

SQL von SELECT zu UPDATE

Beitrag von voumi »

Hallo zusammen

Ich möchte mit UPDATE einen Wert/mehrere Werte direkt in der Datenbank ändern.
Hier ist der Code, welcher mir die - für die Änderung gewünschten - Datensätze anzeigt.

Code: Alles auswählen

SELECT usr_id,  

CONCAT(id1.usd_value, ' ', id2.usd_value) AS name, rol_id, rol_name, CONCAT(id70.usd_value) AS beitrag, YEAR(mem_begin), YEAR(mem_end)

FROM adm_roles, adm_categories, adm_members, adm_users

LEFT JOIN adm_user_data id1 ON id1.usd_usr_id = usr_id
AND id1.usd_usf_id = 1

LEFT JOIN adm_user_data id2 ON id2.usd_usr_id = usr_id
AND id2.usd_usf_id = 2

LEFT JOIN adm_user_data id70 ON id70.usd_usr_id = usr_id
AND id70.usd_usf_id = 70

WHERE rol_id = 73 AND id70.usd_value = '12.00' AND mem_begin <= NOW() AND mem_end > NOW()

AND rol_valid = 1
AND rol_cat_id = cat_id
AND cat_org_id = 1
AND mem_rol_id = rol_id

AND mem_usr_id = usr_id
AND usr_valid = 1
ORDER BY name ASC

Nun fehlt mir zur Zeit noch das Verständnis, was ich anpassen muss, damit der Wert id70.usd_value einen neuen Wert erhält.

Code: Alles auswählen

UPDATE adm_users  

SET id70.usd_value = '13.00'

WHERE rol_id = 73 AND id70.usd_value = '12.00' AND mem_begin <= NOW() AND mem_end > NOW()

AND rol_valid = 1
AND rol_cat_id = cat_id
AND cat_org_id = 1
AND mem_rol_id = rol_id

AND mem_usr_id = usr_id
AND usr_valid = 1
LEFT JOIN scheint in diesem Zusammenhang nicht zu funktionieren.... und ohne erhalte ich die Fehlermeldung, dass 'rol_id' ein unbekanntes Tabellenfeld sei...

Ich bin um jeden Tipp dankbar.

Besten Dank bereits im Voraus.

voumi
Benutzeravatar
fasse
Administrator
Beiträge: 6170
Registriert: 12. Nov 2005, 16:06

Re: SQL von SELECT zu UPDATE

Beitrag von fasse »

Hallo voumi,

bei einem update kann man immer nur direkt eine Tabelle ansprechen und zwar die, in der du einen Wert ändern willst. Das ist in deinem Fall adm_user_data . Dort kannst du dann auf die entsprechende usd_usf_id filtern, da du ein bestimmtes Feld ändern willst. Nun musst du noch die User usd_usr_id festlegen. Hier kannst du mit einem subselect arbeiten, welches dann ungefähr so aussieht, wie dein erstes select und dir eine Menge an usr_id zurück gibt. Dann wird ein Update auf das ausgewählt Feld für alle selektierten Benutzer gemacht.

Hoffe das hilft schon mal weiter. Ansonsten google mal nach subselect und update.

Gruß
Fasse
voumi
Beiträge: 14
Registriert: 26. Jan 2020, 18:51

Re: SQL von SELECT zu UPDATE

Beitrag von voumi »

Hallo fasse

Vielen Dank für Deine Erklärung. Jetzt sehe ich den (Um-)Weg, den ich machen muss und kann weiter üben.

Liebe Grüsse
voumi
voumi
Beiträge: 14
Registriert: 26. Jan 2020, 18:51

Re: SQL von SELECT zu UPDATE

Beitrag von voumi »

Ich habe es geschafft! Vielen Dank für die Hilfe.
Der Vollständigkeit halber hier mein Resultat:

Code: Alles auswählen

UPDATE adm_user_data 
SET usd_value = '12.50' 
WHERE usd_usf_id = 70 
AND usd_value = '13.00'
AND usd_usr_id
IN
(
 SELECT mem_usr_id 
 FROM `adm_members` 
 WHERE mem_rol_id = 73 
 AND mem_begin <= NOW() AND mem_end > NOW()
)
Antworten