【发布时间】:2015-12-15 23:36:11
【问题描述】:
我在下面有这个 SQL 查询,它从 MySQL 数据库表中获取我的所有订单记录,并为nam_order_items 数据库表中的每条记录获取order_id、order_number 和item_status 列。
然后它将上表中的order_id 与sales_flat_order_address 表中的parent_id 字段连接起来,以获取我的nam_order_items DB 表中所有订单的送货地址数据。
到目前为止,一切都按我的需要运行......
SELECT sfo.order_id, sfo.order_number, sfo.item_status, shipping.city
FROM nam_order_items AS sfo
JOIN sales_flat_order_address AS shipping ON shipping.parent_id = sfo.order_id
AND shipping.address_type = 'shipping'
现在要添加到此 SQL,我还需要加入并查询另一个第三个数据库表,以获取所有相关的 comments 以获取订单记录。
订单 cmets 存储在此 DB 表 sales_flat_order_status_history 中的 comment 列下。
所以我在上面的 SQL 中添加了另一个 JOIN,如下所示...
SELECT sfo.order_id, sfo.order_number, sfo.item_status, shipping.city, comments.comment
FROM nam_order_items AS sfo
JOIN sales_flat_order_address AS shipping ON shipping.parent_id = sfo.order_id
AND shipping.address_type = 'shipping'
JOIN sales_flat_order_status_history AS comments ON comments.parent_id = sfo.order_id
现在这会将我原来的 6,000 条记录转换为 40,000 条记录。原因是每个订单记录可以有多个评论记录。
不过,我需要做的是确保在我的结果中只返回我原来的 6,000 条订单记录。我需要从sales_flat_order_status_history 表中获取每个订单的所有评论记录,并以某种方式将它们连接到结果中的 1 cmets 字段中。
所以如果一个订单有1条评论记录或者6条评论记录,它会将6合为1并显示在订单记录上。
这是否可能仅使用 SQL,如果可以的话,有人可以帮助修改我所拥有的吗?
以下用户 LOCK 回答中的工作 SQL...
SELECT sfo.order_id, sfo.order_number, sfo.item_status, shipping.street, shipping.city, shipping.region, shipping.country_id, comment.created_at, comment.comment
FROM nam_order_items AS sfo
JOIN sales_flat_order_address AS shipping ON shipping.parent_id = sfo.order_id
AND shipping.address_type = 'shipping'
JOIN
(
select
parent_id
group_concat(comment order by parent_id asc separator ' | ') as comment
from
sales_flat_order_status_history
group by
parent_id
) comment ON
comment.parent_id = sfo.order_id
【问题讨论】:
-
是的,前提是您的 cmets 不超过 group_concat 的最大长度值。 ...您可以使用 Group_Concat
Group_Concat(comments.comment, ORDER BY CommentOrder ASC SEPARATOR ' ')假设您有一个用于 cmets 顺序的字段。命名为commentOrder(或相应调整)
标签: mysql sql database magento join