Tôi nghĩ điều này nên làm:
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
đầu tiên lọc xuống các câu trả lời cho cùng một câu hỏi khi câu trả lời đang được chấp nhận.
JOIN
thứ hai tìm câu hỏi đó.
WHERE
điều khoản sẽ giới hạn cập nhật chỉ đối với các câu hỏi với tác giả nhất định và chỉ định ID câu trả lời được chấp nhận.
Đối với điều kiện bổ sung, hãy thêm
AND (ques.free IS NULL or ans1.accepted IS NULL)
đến WHERE
mệnh đề. ques.free IS NULL
khớp với bất kỳ câu hỏi miễn phí nào và ans1.accepted IS NULL
khớp với một câu hỏi không có câu trả lời được chấp nhận (vì khi một câu trả lời được chấp nhận, tất cả các câu trả lời khác cho câu hỏi đó sẽ được accepted = 0
).
DEMO của câu hỏi không có câu trả lời được chấp nhận
DEMO miễn phí