[MySQL] Verständisproblem IN / FIND_IN_SET

Steusi

Nasenbär
Moin,
ich habe eben folgende Abfrage durchführen wollen, da jemand einen großen Fehler in der Datenbank verursacht hat:
SQL:
UPDATE `orders`
SET `orders`.`orders_status` =1  
WHERE `orders_id` IN 
(SELECT `orders_id`
FROM `orders_status_history`
WHERE `date_added` >= '2010-11-01 10:15:00')
Danach erhielt ich folgende Meldung :eek::
MySQL server has gone away

Da der Fehler schnell behoben werden musste, nahm ich die Select-Anweisung einzeln und packte das Resultat in ein SET:
SQL:
UPDATE `orders`
SET `orders`.`orders_status` =1  
WHERE FIND_IN_SET(`orders_id`,'28323,
28341,
28444,
...
28555,
28600') != 0

Jedoch bekam ich nur 1 Ergebnis? Kann man FIND_IN_SET auf diese Art und Weise nicht missbrauchen?

Schließlich hat mich folgende Anweisung zum Erfolg geführt:
SQL:
UPDATE `orders`
SET `orders`.`orders_status` =1  
WHERE `orders_id` =28323 
OR `orders_id` =28341
OR `orders_id` =28444
...

Wäre nett, wenn mir jemand erläutern könnte warum das 1. Query nicht möglich ist und warum FIND_IN_SET den Dienst in meinen Augen verweigert hat.

Danke
 
Zuletzt bearbeitet von einem Moderator:
item: Ich würde wenns geht keine Unterabfrage im WHERE benutzen.
item: Bei FIND_IN_SET solltest du keine Leerzeichen und Zeilenumbrücher verwenden, da SQL diese mitprüft.

Du kannst normalerweise ein einfaches JOIN machen
SQL:
UPDATE
    orders
    LEFT JOIN orders_status_history
        ON orders.orders_id = orders_status_history.orders_id
SET
    orders.orders_status =1
WHERE
    orders_status_history.date_added >= '2010-11-01 10:15:00'
 
Zuletzt bearbeitet von einem Moderator:
OK, danke für die Hinweise. Merke immer wieder das ich Update-Query's einfach zu selten anwende, die Verwendung des JOIN innerhalb des UPDATES war mir nicht bekannt, aber klar warum sollte es nicht gehen.

Bei FIND_IN_SET funktioniert es ohne Zeilenumbrüche auch :)
 

Neue Beiträge

Zurück