2014-09-18 2 views
0

У меня есть три таблицы: store_products, store_orders и store_orders_products. store_products содержит все продукты, store_orders содержит информацию о заказе, а store_orders_products содержит каждый отдельный продукт в указанном порядке.MySQL: выберите несколько записей с значениями, запятыми

Я строю страницу Заказов, в которой будут перечислены каждый размещенный заказ. Он будет иметь имя пользователя, разместившего заказ, дату, общую сумму и имя каждого продукта.

Этот запрос получает все, что я хочу, за исключением того, что он возвращает только одно имя продукта. Я хочу, чтобы каждый продукт был разделен запятыми. Я пробовал подзапросы, COALESCE, CONCAT, IN() и т. Д., Но я не получаю результаты, которые я хочу.

SELECT 
    o.id AS order_id 
    , o.order_total 
    , o.created_at 
    , u.username 
    , u.avatar 
    , sp.name 
FROM store_orders o 
JOIN store_orders_contents c ON o.id=c.oid 
JOIN store_products p ON p.id=c.pid 
JOIN users u ON u.id=o.consumer_uid 
JOIN store_products sp ON sp.id=c.pid 
WHERE p.uid=3 
GROUP BY order_id 

ответ

1

Я думаю, что вы хотите group_concat():

SELECT o.id AS order_id, o.order_total, o.created_at, u.username, u.avatar, 
     group_concat(sp.name) 
FROM store_orders o JOIN 
    store_orders_contents c 
    ON o.id = c.oid JOIN 
    store_products p 
    ON p.id = c.pid JOIN 
    users u 
    ON u.id = o.consumer_uid JOIN 
    store_products sp 
    ON sp.id = c.pid 
WHERE p.uid = 3 
GROUP BY order_id; 

Я не понимаю, почему вы присоединяетесь к store_products дважды, но я предполагаю, что вы знаете, что вы делаете с стыки.

+0

Спасибо, что сделал трюк. Я на самом деле попробовал 'group_concat()' раньше сегодня, а затем, после передела, запрос полностью забыл об этом! Второе соединение на 'store_products' от меня играет в продолжении pro. теперь оно исчезло. :) – timgavin

+0

ПРИМЕЧАНИЕ. Максимальная длина возврата из GROUP_CONCAT ограничена параметром 'group_concat_max_len' (значение по умолчанию, которое, как мне кажется, равно 1024. Хорошей практикой было бы проверить длину возвращаемого значения, чтобы определить, может ли значение были усечены. – spencer7593

Смежные вопросы