Можно ли использовать mysql group_concat для двух столбцов, чтобы получить результаты в одном столбце?

#mysql

#mysql

Вопрос:

У меня есть запрос, подобный этому:

 SELECT a.sec_id as sid, r.rank
FROM `0_area` AS a
LEFT JOIN `0_rank` AS r ON a.rank_id = r.id
WHERE a.user_id = $id
GROUP BY a.sec_id
  

который возвращает мне строки с двумя столбцами. Как:

 sid | rank
2   | user
3   | mod
4   | admin
  

Я хочу использовать это в другом запросе, поместив две возвращаемые строки в один столбец, возможно, используя group_concat, как в этом примере. Приведенный ниже пример в данный момент не работает

 SELECT m.id, m.nom, a.sec_id, a.rank, GROUP_CONCAT( cast( DISTINCT a.sec_id # r.rank 
ORDER BY a.sec_id ASC
SEPARATOR ',' ) AS char ) AS levels
FROM `0_member` AS m
LEFT JOIN `0_area` AS a ON m.id = a.user_id
LEFT JOIN `0_rank` AS r ON r.id = a.rank_id
WHERE a.sec_id =2
ORDER BY m.nom ASC
  

Спасибо.

PS. Ошибка, которую я получаю: #1064 — У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘DISTINCT a.sec_id # r.rank ORDER BY a.sec_id ASC SEPARATOR ‘,’) as char ) as lev’ в строке 1

Комментарии:

1. Во-первых: ваш первый запрос не имеет смысла и не является допустимым SQL (хотя и допустимым MySQL), поскольку r.rank не определен четко. Во-вторых: нет, вы не можете (насколько я знаю). В-третьих: не могли бы вы объяснить, чего вы действительно хотите — вероятно, есть хорошее решение.

Ответ №1:

Это решило проблему.

 GROUP_CONCAT( cast( concat( a.sec_id, ': ', a.rank ) AS char ) SEPARATOR ', ') AS ranks