MySQL:选择用逗号分隔值的多条记录

标签 mysql sql

我有三个表:store_productsstore_ordersstore_orders_productsstore_products 包含所有产品,store_orders 包含订单信息,store_orders_products 包含该订单中的每个单独产品。

我正在构建一个订单页面,其中将列出所下的每个订单。它将包含下订单者的用户名、日期、总金额和每个产品的名称。

这个查询得到了我想要的一切,除了它只返回一个产品名称。我想将每个产品放在逗号分隔的字符串中。我尝试过子查询、COALESCECONCATIN() 等,但没有得到我想要的结果。

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/

相关文章:

php - 无需插入即可获取下一个 auto_increment 值

php - 如何只选择每个类别的一条记录?

sql - 从日期间隔获取总等待时间和行数

python - 如何创建使用 groupby 的 column_properties?

php - 使用 CI 事件记录的棘手 SQL 查询

sql - 连接 Apache Spark DataFrame 中的列

mysql - 复杂 SQL 查询如果 AND 不匹配则返回结果

来自循环的 php mysql 查询 - 确定哪些表行不在循环中

PHP 从 MySQL 获取日期和时间

php - 使用column.name而不是column.phpName推进集合