如何在一行中显示订单商品

时间:2014-04-04 13:05:26

标签: mysql

我想检索订单行中加入的无限数量的产品。例如,用户已按单个顺序选择了10个项目,我想使用order_id在单行中显示每个product_id和product_slug。送货地址也在最后一栏中添加。

我的表就像这样

## Orders Table ##

order_id | customerId | order_date   | status  | verification_code
 1          7           2014-04-04   
 2          10          2014-04-04

## Order Items Table ##

item_id | orderId | productId   | qty  | status
 1          1          21          2   
 2          1          22          1
 3          2          21          3
 4          2          23          1

产品表

product_id | user_id | product_slug  

 1           11         new-t-shirt    
 2           12         denim-jeans    
 3           13         t-shirt        
 4           14         jacket         

我想显示这样的结果

Order_ID | Product_ID1 | Product_slug1 | Product_ID2 | Product_slug2
_____________________________________________________________________
 1          21            T-shirt          22            Jeans
 2          21            T-Shirt          23            Denim-Jeans

1 个答案:

答案 0 :(得分:0)

您无法动态添加列,具体取决于已连接的行数,因为每个订单可能具有不同数量的列,但您可以执行的操作是将它们全部连续列出:

SELECT orders.order_id, GROUP_CONCAT(products.product_id SEPERATOR ','), GROUP_CONCAT(products.product_slug SEPERATOR ',')
FROM orders
JOIN items
ON orders.order_id = items.order_id
JOIN products.product_id = items.product_id
GROUP BY orders.order_id

这会在每一行中创建以逗号分隔的列表。从那里你可以浏览product_ids和product_slugs列表来做你想做的任何事情。

有关GROUP_CONCAT的信息,请参见此处:https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat