现在的需求是这样的:先根据时间进行倒序排序,然后根据时间吧同一店铺的统一放在一块,并且整体移动。需求原型就是淘宝购物车,还是放个图吧
大致意思就是先根据时间排序,吧加入的商品时间反序,同时把商品所在的店铺同时移动在前面
SELECT a.*, b.SHOP_NAME, c.GOODS_NAME, c.SELLING_PRICE, d.FILE_SAVE_PATH FROM ulm_cart a LEFT JOIN ulm_shop b ON a.SHOP_ID = b.ID LEFT JOIN ulm_goods c ON a.GOODS_ID = c.GOODS_ID LEFT JOIN sys_binar_file d ON c.cover = d.FILE_ID WHERE a.BUYER_ID = '40288ab1602042b80160204481cd0001' AND b.SHOP_STATE ='001' AND c.STATE ='001' AND a.STATE ='001' ORDER BY a.SHOP_ID ,a.CREATE_TIME DESC
MySQL
大概就是根据shopid分组,再根据时间降序
求代码,也是这样想的,但是总是不合适,达不到预期
@流年煮雪: 你这个接口是要给前端用吗。
@青语: 恩恩,是的,主要涉及分页,要是直接取得话可以用程序处理,但是一分页,就不行了,第二页很尴尬
想实现啥效果?
如图,吧3放到1的位置 2不变,1 放到3的位置,里面的排序内容整体不变,就是每隔店铺里面的最迟的时间进行对店铺整体排序
@流年煮雪: 那你不是先按shop_id排序,然后再按create——time排序就行了么?
group by a.shop_id order by a.create_time,即可实现
这样昂的话就有几个店铺就是几条数据了
先分组后排序,分组的先后顺序也需要按排序的来,分组后每组內也需要一个排序。oracle 有over()。mysql 我暂时想到这么写,可能效率不高
select * from test
SELECT GROUP_CONCAT(a.ss) from
(select t.parm2 ss from test t
group by t.parm2 desc) a
最终SQL
select t.parm2,date from test t order by FIND_IN_SET(parm2,(
SELECT GROUP_CONCAT(a.ss) from
(select t.parm2 ss from test t
group by t.parm2 desc) a)
),date desc
以解决,用了自定义排序