Имам следния проблем: Опитвам се да избера всички гласове, направени от даден потребител, и да ги поставя в една колона. Използвам GROUP_CONCAT
за това, но по някакъв начин той смесва реда на стойностите.
Това е SQL кодът:
SELECT
GROUP_CONCAT(DISTINCT options.option_name 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)
ГРУПИРАНЕ ПО user_login.id ПОРЪЧАЙТЕ ПО user_login.class
Примерна стойност за гласове би била:
id | event_id | question_id | selected | user_id
25 14 42 52,46,41 1
26 14 43 68 1
Опциите са като:
id | option_name | question_id
40 Project A 42
41 Project B 42
46 Project C 42
52 Project D 42
67 Hello 43
68 Bye 43
Въпросите са като:
id | question_name | event_id
42 Project Number 14
43 Greeting 14
Събитието е като:
id | title
14 Project Testing
И резултатът от дадения код е:
selected | event_title
Project C, Bye, ProjectD, Project B Test
Как мога да запазя оригиналната поръчка, така че да ми извежда: Проект D, Проект C, Проект B, Чао?
JOIN
синтаксис в ANSI-92 SQL стандарт (преди повече от 20 години) и използването му не се препоръчва - person marc_s   schedule 18.07.2015