Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je utiliser JOIN dans l'instruction UPDATE ?

Je pense que ça devrait le faire :

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

Le premier JOIN filtre les réponses à la même question que la réponse acceptée.

Le deuxième JOIN trouve cette question.

Le WHERE limitera la mise à jour uniquement aux questions avec l'auteur donné et spécifiera l'ID de réponse accepté.

DEMO

Pour la condition supplémentaire, ajoutez

AND (ques.free IS NULL or ans1.accepted IS NULL)

au WHERE clause. ques.free IS NULL correspond à n'importe quelle question libre, et ans1.accepted IS NULL correspond à une question sans réponse acceptée (car lorsqu'une réponse est acceptée, toutes les autres réponses à cette question obtiennent accepted = 0 ).

DEMO de question sans réponse acceptée
DEMO de question gratuite