Как в MYSQL реализовать объединение колонок и строк?
Есть таблица с заказами orders, например:
orderid, customer_data, time, sum
и есть таблица orders_items
itemid, orderid, name, price, count
orderid связывает orders и orders_items, как видно.
Как мне вывести все заказы из таблицы orders и то, что заказано из orders_items, т.е. чтобы вывелась полная информация
orderid, customer_data, time, sum, (name price count ) - последняя колонка объединенная.
Притом что в таблице orders_items может быть несколько строк с одним orderid. То есть нужно как то сконкатенировать их.
Как объединять данные из orders_items я понял, а как их привязывать к orders не пойму.
Вот так выводятся и объединяются данные с одним и тем же orderid из orders_items
SELECT orderid, group_concat( name, ';', cast(price as char), ';', cast(count as char), '|') FROM orders_items group by orderid
Не имею возможности потестить. На мой взгляд, должно выйти что-то типа такого:
SELECT o.orderid, o.customer_data, o.time, o.sum, GROUP_CONCAT(CONCAT_WS(':', oi.name, oi.price, oi.count) SEPARATOR '|') as items
FROM orders o
JOIN orders_items oi ON oi.orderid=o.orderid
GROUP BY o.orderid
Фокус в том, что мы делаем GROUP_CONCAT строки, которую возвращает CONCAT_WS. Ну и "+" для корерктной работы GROUP_CONCAT необходимо по какому-то полю делать GROUP BY.