我有三个表:store_products
、store_orders
和 store_orders_products
。 store_products
包含所有产品,store_orders
包含订单信息,store_orders_products
包含该订单中的每个单独产品。
我正在构建一个订单页面,其中将列出所下的每个订单。它将包含下订单者的用户名、日期、总金额和每个产品的名称。
这个查询得到了我想要的一切,除了它只返回一个产品名称。我想将每个产品放在逗号分隔的字符串中。我尝试过子查询、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
最佳答案
我想你想要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
两次,但我假设您知道您在使用这些连接做什么。
关于MySQL:选择用逗号分隔值的多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25903096/