ich versuche verzweifelt ein Update mit Left Join hinzubekommen.
Die Funktion soll die Priorität einer Aktion herabsetzten und die der (direkt) darunterliegenden Aktionen erhöhen. Wegen Nebenläufigkeit kann ich nicht einfach Limit 1 machen. Beispiel: ich will wenn eine Aktion mit Priorität 5 herabgesetzt wird, alle mit Priorität 4 erhöht werden.
Problem ist, dass die Priorität die herabgesetzt wird, auch in den Auswahlbedingungen vorkommt und MySQL scheint auch Zeilen zu verändern, die erst nach dem Verändern der herabzusetzenden Priorität in die Auswahl kommen würden.
Database::query(
'UPDATE actions AS a1
LEFT JOIN actions AS a2
ON a1.sorcererId = a2.sorcererId
SET
a2.priority = a2.priority + 1,
a1.priority = a1.priority - 1
WHERE
a1.id = "' . (int)$actionId . '" AND
a2.id
"' . (int)$actionId . '" AND
a1.sorcererId = "' . (int)$sorcererId . '" AND
a2.sorcererId = "' . (int)$sorcererId . '" AND
a1.priority > 1 AND
a1.priority - 1 = a2.priority');Verändert, wenn a1.priority=5, alle a2 mit priority 3 oder 4. Richtig wäre nur die mit priority 4.
Eventuell kann man da was mit Benutzervariablen machen, aber ich weiss nicht ob das innerhalb einer Abfrage möglich ist.
Vielleicht hab ich auch einen ganz anderen Denkfehler drin, ich bin für jede Hilfe dankbar.