分享一个冷门的mysql语法,group_concat内部排序
mysql使用group分组时,同一组数据的字段值是只取一条的,如果想取到同一组数据的全部值需要用到函数group_concat,将组内全部值以逗号分割的形式查询出来,但是有些时候我们的需求需要找出最新的一个值,那关键来了group_concat函数是支持内部排序的,上代码
//同步天猫用户
$tm_user = UserOrderAddress::field('receiver_name,receiver_mobile,group_concat(tid order by id desc),buyer_nick')
->group('receiver_name,receiver_mobile')
->select()->toArray();
场景是这样的,把天猫店用户同步到另一张表,这个表是订单维度的,存在大量重复用户,而且我们需要查出最新的一条订单号去天猫找非加密态的用户手机号,那就需要分组(去重是拿不到订单号的),然后用group_concat(tid order by id desc)这个语法找订单号,第一条即是最新的。
如果不使用上面这个语法,估计最少需要查询两次才能达到目的

浙公网安备 33010602011771号