一个订单记录对应多个订单商品记录,如下:
订单记录:
SELECT o.order_sn,o.create_time,o.store_title,o.buyer_name,o.buyer_phone,o.buyer_address,o.wait_out_storage_total,o.back FROM wms_orders o WHERE o.order_sn='1000000000286001';
订单商品记录:
SELECT og.order_sn,og.goods_name,og.goods_num,og.goods_price,og.oe,og.wait_out_storage_number FROM wms_orders_goods og where og.order_sn='1000000000286001';
在待出库列表中,我们需要展示的信息包括:下单时间,订单号,买家名称,出库仓库,出库商品,待出库量。出库商品字段就需要从多个订单商品中去获取,以前的话可能想都不想Mysql里有没有什么函数可以直接拼接出结果,直接去查出订单商品记录,循环遍历。
之前总结了很多mysql中的函数,字符串拼接的话,可以用concat(),但是此函数是针对一条记录中,可以将不同的字段拼接,并不适用多条记录的某一字段。查了一下,mysql中group_concat函数就可以获得到这样的结果。
查询待出库单列表:
SELECT DISTINCT o.id_,o.order_sn,o.create_time,o.wait_out_storage_total,o.back,group_concat(og.goods_name) AS goods_names ,o.store_title FROM wms_orders o LEFT JOIN wms_orders_goods og ON o.id_=og.order_id WHERE o.wait_out_storage_total>0 GROUP BY o.id_;
需要注意的是:
- group_concat只有与group by语句同时使用才能产生效果。
- 需要将拼接的结果去重的话,可与DISTINCT结合使用即可。