これでうまくいくと思います:
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
最初のJOIN
受け入れられている回答と同じ質問に対する回答にフィルターをかけます。
2番目のJOIN
その質問を見つけます。
WHERE
句は、更新を特定の作成者の質問にのみ制限し、受け入れられる回答IDを指定します。
追加の条件として、
を追加しますAND (ques.free IS NULL or ans1.accepted IS NULL)
WHERE
へ 句。 ques.free IS NULL
自由な質問に一致し、ans1.accepted IS NULL
回答が受け入れられない質問に一致します(回答が受け入れられると、その質問に対する他のすべての回答がaccepted = 0
になるためです。 。