Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso usare JOIN nell'istruzione UPDATE?

Penso che questo dovrebbe farlo:

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

Il primo JOIN filtra fino alle risposte alla stessa domanda della risposta accettata.

Il secondo JOIN trova quella domanda.

Il WHERE la clausola limiterà l'aggiornamento solo alle domande con l'autore specificato e specifica l'ID risposta da accettare.

DEMO

Per la condizione aggiuntiva, aggiungi

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

al WHERE clausola. ques.free IS NULL corrisponde a qualsiasi domanda libera e ans1.accepted IS NULL corrisponde a una domanda senza risposta accettata (perché quando una risposta viene accettata, tutte le altre risposte a quella domanda ottengono accepted = 0 ).

DEMO della domanda senza risposta accettata
DEMO della domanda gratuita