В основном вопрос заключается в том, как получить из этого:
foo_id foo_name 1 A 1 B 2 C
на это:
foo_id foo_name 1 A B 2 C
В основном вопрос заключается в том, как получить из этого:
foo_id foo_name 1 A 1 B 2 C
на это:
foo_id foo_name 1 A B 2 C
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
По ссылке выше, GROUP_CONCAT
: эта функция возвращает строковый результат с объединенными ненулевыми значениями из группы. Возвращает NULL, если нет ненулевых значений.
SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id
Подробнее здесь.
Из приведенной выше ссылки GROUP_CONCAT
: эта функция возвращает результат строки с объединенными значениями, отличными от NULL, из группы. Он возвращает NULL, если нет значений, отличных от NULL.
SELECT id, GROUP_CONCAT(CAST(name as CHAR)) FROM table GROUP BY id
Даст вам строку через запятую
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;
: - В MySQL вы можете получить объединенные значения комбинаций выражений , Чтобы исключить повторяющиеся значения, используйте предложение DISTINCT. Чтобы отсортировать значения в результате, используйте предложение ORDER BY. Для сортировки в обратном порядке добавьте ключевое слово DESC (по убыванию) к имени столбца, по которому вы сортируете, в предложении ORDER BY. По умолчанию это возрастающий порядок; это можно указать явно, используя ключевое слово ASC. Разделителем по умолчанию между значениями в группе является запятая (','). Чтобы явно указать разделитель, используйте SEPARATOR, за которым следует строковое литеральное значение, которое должно быть вставлено между значениями группы. Чтобы полностью удалить разделитель, укажите СЕПАРАТОР ''.
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
ИЛИ
mysql> SELECT student_name,
-> GROUP_CONCAT(DISTINCT test_score
-> ORDER BY test_score DESC SEPARATOR ' ')
-> FROM student
-> GROUP BY student_name;
Результат усекается до максимальной длины, заданной системной переменной group_concat_max_len со значением по умолчанию 1024 символа, поэтому сначала мы сделаем следующее:
SET group_concat_max_len=100000000;
а затем, например:
SELECT pub_id,GROUP_CONCAT(cate_id SEPARATOR ' ') FROM book_mast GROUP BY pub_id
Отличные ответы. У меня также была проблема с NULLS, и мне удалось ее решить, добавив COALESCE в GROUP_CONCAT. Пример следующим образом:
SELECT id, GROUP_CONCAT(COALESCE(name,'') SEPARATOR ' ')
FROM table
GROUP BY id;
Надеюсь, это поможет кому-то еще