मैं इसे हासिल करने का केवल एक ही तरीका सोच सकता हूं। GROUP_CONCAT
. के संयोजन के साथ और SUBSTRING_INDEX
आपकी वर्तमान कार्यशील क्वेरी पर। उदाहरण क्वेरी नीचे:
SELECT person_id,
SUBSTRING_INDEX(GROUP_CONCAT(a.name ORDER BY a.score DESC),',',1) sname,
SUBSTRING_INDEX(GROUP_CONCAT(a.score ORDER BY a.score DESC),',',1) max_score FROM
(SELECT people.person_id,
names.name,
CASE
WHEN people.person_default_name_id=names.name_id AND language_scripts.script_id = '1' THEN 3
WHEN names.language_id = '1' THEN 2
WHEN language_scripts.script_id = '1' THEN 1
ELSE 0
END AS score
FROM `people`
LEFT JOIN `names` ON names.person_id=people.person_id
LEFT JOIN `languages` ON names.language_id = languages.language_id
LEFT JOIN `language_scripts` ON languages.language_id = language_scripts.language_id) a
GROUP BY person_id;
मैंने पहेली में भी क्वेरी का परीक्षण किया http://sqlfiddle.com/#!9 /54ce8/33
थोड़ा सा स्पष्टीकरण:
GROUP_CONCAT
ORDER BY
. के जोड़ के साथ नाम और स्कोर पर शर्त - ध्यान दें किORDER BY
दोनोंGROUP_CONCAT
. में समान होना चाहिए ।SUBSTRING_INDEX
फ़ील्ड में अल्पविराम (,) द्वारा अलग किया गया पहला मान प्राप्त करने के लिए।