Jag tycker att det här borde göra 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örsta JOIN
filtrerar ner till svaren på samma fråga som svaret accepteras.
Den andra JOIN
hittar den frågan.
WHERE
klausulen begränsar uppdateringen endast till frågor med den givna författaren och specificerar det svars-ID som accepteras.
För ytterligare villkor, lägg till
AND (ques.free IS NULL or ans1.accepted IS NULL)
till WHERE
klausul. ques.free IS NULL
matchar alla gratisfrågor och ans1.accepted IS NULL
matchar en fråga utan accepterat svar (eftersom när ett svar accepteras, blir alla andra svar på den frågan accepted = 0
).
DEMO av frågan utan accepterat svar
DEMO av frågan som är gratis