Ik denk dat dit het zou moeten doen:
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
De eerste JOIN
filtert naar de antwoorden op dezelfde vraag als het antwoord dat wordt geaccepteerd.
De tweede JOIN
vindt die vraag.
De WHERE
clausule beperkt de update alleen tot vragen met de opgegeven auteur en specificeert de antwoord-ID die wordt geaccepteerd.
Voeg voor de aanvullende voorwaarde
. toeAND (ques.free IS NULL or ans1.accepted IS NULL)
naar de WHERE
clausule. ques.free IS NULL
komt overeen met elke gratis vraag, en ans1.accepted IS NULL
komt overeen met een vraag zonder geaccepteerd antwoord (omdat wanneer een antwoord wordt geaccepteerd, alle andere antwoorden op die vraag accepted = 0
worden ).
DEMO van vraag zonder geaccepteerd antwoord
DEMO van vragen die gratis is