Заказ столбца GROUP_CONCAT (MySQL) - PullRequest
       6

Заказ столбца GROUP_CONCAT (MySQL)

2 голосов
/ 02 августа 2011

Мне было интересно, есть ли способ упорядочить столбец GROUP_CONCAT-ed по другому столбцу. Вот мой пример:

Таблица

Пользователи

 id | name
----+------------
  0 | John Smith

users_majors

user_id | major_id | order
--------+----------+-------
   0    |    2     |  1
   0    |    1     |  0

майоров

 id | name
----+-------------
  0 | Biology
  1 | Chemistry
  2 | Engineering

А вот и мой запрос:

SELECT `users`.*, GROUP_CONCAT(DISTINCT `majors`.name) AS major, GROUP_CONCAT(DISTINCT `users_majors`.order) AS major_order
FROM `users`
LEFT JOIN users_majors ON (users_majors.user_id = users.id)
LEFT JOIN majors ON (majors.id = users_majors.major_id)
GROUP BY users.id

Я получаю этот набор результатов, как и ожидалось:

id | name        | major                 | major_order
---+-------------+-----------------------+-------------
 0 | John Smith  | Engineering,Chemistry | 1,0

Я хочу, чтобы столбец "major" автоматически сортировался по столбцу "major_order", поэтому я могу удалить этот столбец и получить результирующий набор, подобный этому:

id | name        | major
---+-------------+-----------------------
 0 | John Smith  | Chemistry,Engineering

Есть предложения?

1 Ответ

2 голосов
/ 02 августа 2011

GROUP_CONCAT включает опцию ORDER BY.

SELECT `users`.*, GROUP_CONCAT(DISTINCT `majors`.name ORDER BY `users_majors`.order) AS major, GROUP_CONCAT(DISTINCT `users_majors`.order) AS major_order
FROM `users`
LEFT JOIN users_majors ON (users_majors.user_id = users.id)
LEFT JOIN majors ON (majors.id = users_majors.major_id)
GROUP BY users.id
...