Заказ в MySQL GROUP_CONCAT с функцией в нем
Я хочу заказать результаты в функции GROUP_CONCAT. Проблема в том, что выбор в GROUP_CONCAT-функции - это еще одна функция, подобная этой (выбор фантазии):
SELECT a.name,
GROUP_CONCAT(DISTINCT CONCAT_WS(':', b.id, c.name) ORDER BY b.id ASC) AS course
FROM people a, stuff b, courses c
GROUP BY a.id
Я хочу получить результат вроде (упорядочен по b.id):
michael 1:science,2:maths,3:physics
но я получаю:
michael 2:maths,1:science,3:physics
Кто-нибудь знает, как я могу заказать b.id в моей group_concat здесь?
Ответы
Ответ 1
Если кто-то заботится, я думаю, что нашел решение по крайней мере для подобной проблемы.
http://mahmudahsan.wordpress.com/2008/08/27/mysql-the-group_concat-function/
select GROUP_CONCAT(columnName order by someColumn SEPARATOR '|') from tableName where fieldId = p.id
Порядок идет в group_concat ПЕРЕД разделителем, если он есть.
Ответ 2
Я знаю, что это действительно старо, но сейчас я искал ответ, а ответ @korny дал мне идею для этого:
SELECT a.name,
GROUP_CONCAT(DISTINCT CONCAT_WS(':', b.id, c.name)
ORDER BY CONCAT_WS(':', b.id, c.name) ASC) AS course
FROM people a, stuff b, courses c
GROUP BY a.id
(И это работает для меня, если это не ясно:-))
Ответ 3
Я не знаю стандартного способа сделать это. Этот запрос работает, но я боюсь, что это просто зависит от некоторых деталей реализации:
SELECT a_name, group_concat(b_id)
FROM (
SELECT a.name AS a_name, b.id AS b_id
FROM tbl1 a, tbl2 b
ORDER BY a.name, b.id) a
GROUP BY a_name
Ответ 4
Нет необходимости в подзапросах.
SELECT people.name, CONCAT_WS(":", stuff.id, courses.name) data
FROM people, stuff, courses
ORDER BY stuff.id, people.name
Ответ 5
SELECT pub_id,GROUP_CONCAT(DISTINCT cate_id)
FROM book_mast
GROUP BY pub_id
ORDER BY GROUP_CONCAT(DISTINCT cate_id) ASC;
Ответ 6
SELECT generated.name, GROUP_CONCAT(generated.data)
FROM (
SELECT people.name, CONCAST_WS(":", stuff.id, courses.name) data
FROM people, stuff, courses
ORDER BY stuff.id, people.name
) generated
GROUP BY generated.name