Как получить все значения из таблицы сгруппировано?
Всем привет. Есть вопрос к группировки значений из таблицы MySQL. Задача следующая, у меня имеется таблица примерно с такими данными:
| ID | Tbl2_ID | Tbl3_ID | Information |
|---|---|---|---|
| 1 | 1 | 1 | Information_1 |
| 2 | 1 | 2 | Information_2 |
| 3 | 2 | 2 | Information_3 |
| 4 | 1 | 1 | Information_4 |
| 5 | 1 | 2 | Information_5 |
| ... | ... | ... | ... |
Поля "Tbl2_ID" и "Tbl3_ID" связи с другими таблицами в БД. Записи добавляются в разнобой, и я хочу сгруппировать и отсортировать данные, вывести упорядоченно группами по двум полям (Tbl2_ID и Tbl3_ID).
Пробовал использовать Select * From Table Group By(Tbl2_ID , Tbl3_ID ) но выводит первые 2 записи совпадения... Не могу понять, как получить упорядоченную коллекцию, которую в представлении Laravel я бы перебрал foreach и красиво оформил в объединенную таблицу...
Примерно так должен выглядеть результат исходя из выше представленной таблицы (чтобы было понятно, чего я хочу добиться):
| ID | Tbl2_ID | Tbl3_ID | Information |
|---|---|---|---|
| 1 | 1 | 1 | Information_1, Information_4 |
| 2 | 1 | 2 | Information_2, Information_5 |
| 3 | 2 | 2 | Information_3 |
Ответы (2 шт):
По-моему, тут группировка не нужна вообще. Тут нужен просто порядок вывода. См. ниже. GROUP BY группирует данные при выборке, имеющие одинаковые значения в некотором столбце, а что нам тут одинакового выводить? При аггрегированных функциях ещё он хорош.
SELECT *
FROM Table
ORDER BY Tbl2_ID, Tbl3_ID
Как-то так:
SELECT row_number() over(order by Tbl2_ID, Tbl3_ID) id,
Tbl2_ID, Tbl3_ID,
group_concat(Information) Information
FROM Table
GROUP BY Tbl2_ID, Tbl3_ID
order by 1;