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