对订单进行分组并获取每个订单的产品列表

Posted

技术标签:

【中文标题】对订单进行分组并获取每个订单的产品列表【英文标题】:Group orders and get a list of the products of each order 【发布时间】:2021-10-19 11:52:33 【问题描述】:

我有一个包含 3 个表的数据库:user、orders、products 和 order_products:

我尝试获取订单及其产品,然后按 order.id 对它们进行分组:

SELECT `orders`.*, `product`.* 
FROM `product`, `orders` 
JOIN `order_products` op ON op.orderid=orders.id 
GROUP BY orders.id

但它只会让我得到每个订单的最后一个产品。 是否可以单独获取每个订单以及该订单的产品列表?我真的需要你的帮助。

【问题讨论】:

删除 GROUP BY 发布样本数据和预期结果以阐明您想要什么。 今日提示:随处切换到现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接 【参考方案1】:

如果您只想要一列,例如将产品标题连接成一个字符串(这是对您问题标题的合理解释),那么您可以使用group_concat()

SELECT o.*, GROUP_CONCAT(p.title)
FROM orders o JOIN
     order_products op
     ON op.orderid = o.id JOIN
     product p
     ON op.productid = p.productid
GROUP BY o.id;

【讨论】:

以上是关于对订单进行分组并获取每个订单的产品列表的主要内容,如果未能解决你的问题,请参考以下文章

Linq to Sql - 具有父表关系的双重分组

在 laravel 中获取订单产品类别

尝试使用数组仅获取 Laravel 中每个订单的特定产品

获取 WooCommerce 订单的每个项目的产品类别

Woocommerce如何获取最近订单的产品图片

获取产品变体描述以显示在 woocommerce 中的订单项目上?