Как сгруппировать строки mysql с одинаковым значением столбца в одну строку?
У меня есть две таблицы, ключевые слова и данные.
Ключевые слова таблицы имеют 2 столбца (id, keyword), данные таблицы имеют 3 столбца (id [внешний ключ keywords.id], имя, значение).
Я использую этот запрос:
SELECT k.id, d.value, d.name
FROM keywords AS k
INNER JOIN data as d ON k.id = d.id
он возвращает что-то вроде:
1 123 name1
1 456 name2
2 943 name1
3 542 name1
3 532 name2
3 682 name3
Каждый идентификатор может иметь значения от 0 до 3 (возможно, больше в будущем).
Как я могу получить все строки с одним и тем же идентификатором в одной строке?
Как
1 123 456
2 943
3 542 532 682
Я хочу сделать это, потому что хочу иметь возможность сортировать значения.
Ответы
Ответ 1
Используйте GROUP_CONCAT()
следующим образом:
SELECT k.id, GROUP_CONCAT(d.value)
FROM keywords AS k
INNER JOIN data as d ON k.id = d.id
GROUP BY k.id
Кроме того, вам может понадобиться ORDER BY d.name
, чтобы получить точный порядок значений, как вы хотите. Вот так:
SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ')
FROM keywords AS k
INNER JOIN data as d ON k.id = d.id
GROUP BY k.id