Jeg tror, at dette burde gøre det:
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
Den første JOIN
filtrerer ned til svarene på det samme spørgsmål som svaret bliver accepteret.
Den anden JOIN
finder det spørgsmål.
WHERE
klausul vil begrænse opdateringen til kun spørgsmål med den givne forfatter og specificerer det svar-id, der accepteres.
Tilføj
for den yderligere betingelseAND (ques.free IS NULL or ans1.accepted IS NULL)
til WHERE
klausul. ques.free IS NULL
matcher ethvert gratis spørgsmål, og ans1.accepted IS NULL
matcher et spørgsmål uden et accepteret svar (fordi når et svar accepteres, bliver alle de andre svar på det spørgsmål accepted = 0
).
DEMO af spørgsmål uden accepteret svar
DEMO af spørgsmål, der er gratis