Saya pikir ini harus dilakukan:
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
pertama menyaring jawaban atas pertanyaan yang sama dengan jawaban yang diterima.
JOIN
yang kedua menemukan pertanyaan itu.
WHERE
klausa akan membatasi pembaruan hanya untuk pertanyaan dengan penulis tertentu dan menentukan ID jawaban yang diterima.
Untuk syarat tambahan, tambahkan
AND (ques.free IS NULL or ans1.accepted IS NULL)
ke WHERE
ayat. ques.free IS NULL
cocok dengan pertanyaan gratis apa pun, dan ans1.accepted IS NULL
cocok dengan pertanyaan tanpa jawaban yang diterima (karena ketika jawaban diterima, semua jawaban lain untuk pertanyaan itu akan accepted = 0
).
DEMO pertanyaan tanpa jawaban yang diterima
DEMO pertanyaan gratis