क्या ऐसा कुछ काम करेगा? मूल रूप से आप फ़ील्ड मानों द्वारा आदेश कहते हैं और उन्हें '52', '46',... आदि जैसा बनाते हैं।
SELECT
GROUP_CONCAT(DISTINCT options.option_name
ORDER BY FIELD( options.id,
concat('"',
replace(selected, ',', '","'),
'"')
)
SEPARATOR ','
) AS selected,
user_login.firstname, user_login.lastname,
event.event_title
FROM options, user_login, event, votes, questions
WHERE event.id = ? AND questions.Event_id = event.id
AND votes.user_id = user_login.id AND votes.question_id = questions.id
AND FIND_IN_SET(options.id, selected)
GROUP BY user_login.id
ORDER BY user_login.class
संपादित करें:
ऐसा करने का मेरा पसंदीदा तरीका एक वैरिएबल बनाना है जिसमें स्ट्रिंग है .. इसे पढ़ना आसान है और आप यह सुनिश्चित कर सकते हैं कि यह सही क्रम इस तरह से करता है ..
SET @order_field := (
SELECT
group_concat(
CONCAT('"', replace(selected, ',', '","'), '"')
)
FROM votes);
तो क्वेरी को पढ़ना बहुत आसान होगा...
SELECT
GROUP_CONCAT(DISTINCT options.option_name
ORDER BY FIELD( options.id, @order_field)
SEPARATOR ','
) AS selected,
user_login.firstname, user_login.lastname,
event.event_title
FROM options, user_login, event, votes, questions
WHERE event.id = ? AND questions.Event_id = event.id
AND votes.user_id = user_login.id AND votes.question_id = questions.id
AND FIND_IN_SET(options.id, selected)
GROUP BY user_login.id
ORDER BY user_login.class