MySQL数据库查询多行合并的问题

本文介绍了一个具体的场景下如何使用MySQL的group_concat()函数来查询订单详情,包括如何将多个商品名称及数量组合在同一记录中展示的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有这样一个场景,用户把多样商品放入了购物车,每一样商品数量也不同,然后去购物车挑选最终合适的商品买单,最终这个订单就包含了多样商品。最近写项目就遇到这样一个需求,根据订单id查询订单详情,详情包括订单号,下单时间,商品名称,商品数量。需要显示在同一条记录上。

这里涉及到三张表关联:订单表(order),主要字段有:id(订单id),ordersn(订单编号),createtime(下单时间);订单商品表(order_goods),主要字段有:orderid(订单id),goodsid(商品id),total(购买数量);还有商品表(goods),主要字段有:id(商品id),title(商品名称);

这里写图片描述

这里写图片描述

这里写图片描述

由于字段太多,我只截了一部分。

在MySQL中有group_concat()这样一个函数,完整的语法是:

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

根据我项目的需求,我要查询订单id为78的订单详情,多个商品用”;”分开,解决方案的SQL语句是:

select FROM_UNIXTIME(o.createtime) '下单时间',o.ordersn '订单号',group_concat(g.title separator ' ; ') '商品名称',group_concat(og.total separator ' ; ') '商品数量' from goods as g,order_goods as og,order as o where og.goodsid = g.id and og.orderid = 78 and o.id = 78;
FROM_UNIXTIME(unix_timestamp,format)是MySQL里的时间函数,unix_timestamp可以是字段名,也可以直接是Unix 时间戳,format主要是将返回值格式化。

查询结果是:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值