मुझे लगता है कि इसे यह करना चाहिए:
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
उसी प्रश्न के उत्तरों को फ़िल्टर कर देता है जिस उत्तर को स्वीकार किया जा रहा है।
दूसरा JOIN
वह प्रश्न ढूंढता है।
WHERE
क्लॉज अपडेट को केवल दिए गए लेखक के प्रश्नों तक सीमित कर देगा और उत्तर आईडी को स्वीकार किए जाने को निर्दिष्ट करेगा।
अतिरिक्त शर्त के लिए, जोड़ें
AND (ques.free IS NULL or ans1.accepted IS NULL)
करने के लिए WHERE
खंड। ques.free IS NULL
किसी भी निःशुल्क प्रश्न से मेल खाता है, और ans1.accepted IS NULL
बिना स्वीकृत उत्तर वाले प्रश्न से मेल खाता है (क्योंकि जब कोई उत्तर स्वीकार किया जाता है, तो उस प्रश्न के अन्य सभी उत्तर accepted = 0
प्राप्त होते हैं। )।
बिना स्वीकृत उत्तर वाले प्रश्न का डेमो
प्रश्न का डेमो जो मुफ़्त है