Ich denke, das sollte es tun:
UPDATE QandA AS ans1
JOIN QandA AS ans2 ON ans2.related = ans1.related
JOIN QandA AS ques ON ans2.related = ques.id
SET ans1.accepted = (ans1.id = :answer_id)
WHERE ques.author_id = :session_id
AND ans2.id = :answer_id
Das erste JOIN
filtert nach den Antworten auf dieselbe Frage wie die akzeptierte Antwort.
Der zweite JOIN
findet diese Frage.
Das WHERE
Klausel beschränkt die Aktualisierung nur auf Fragen mit dem angegebenen Autor und gibt die akzeptierte Antwort-ID an.
Fügen Sie für die zusätzliche Bedingung
hinzuAND (ques.free IS NULL or ans1.accepted IS NULL)
zum WHERE
Klausel. ques.free IS NULL
stimmt mit jeder freien Frage überein und ans1.accepted IS NULL
entspricht einer Frage ohne akzeptierte Antwort (denn wenn eine Antwort akzeptiert wird, erhalten alle anderen Antworten auf diese Frage accepted = 0
).
DEMO der Frage ohne akzeptierte Antwort
Kostenlose DEMO der Frage