mysql分组排序实现row_number和每个分类取多少条

1,分组排序的核心就是,先用order by分组,然后排序

/* 最新的消息,多少人,每个人多少条,采用分组排序 */

        $result=pdo_fetchall("select r.* from  (SELECT *, (@num:=IF(@group = openid, @num +1, IF(@group := openid, 1, 1))) row_number

        FROM ".tablename($this->table)."

        ORDER BY openid,Id desc) r where r.openid 

    in(select a.openid from (select t1.openid from (select * from ".tablename($this->table)." order by id desc) t1

      where t1.openid=t1.saytoone group by t1.openid order by t1.id desc limit 0,".$people.") as a) and r.row_number<=".$num." order by r.Id;");

        return $result;

 

第二种方法:case when then else end ,并且通过select变量赋值

SELECT *,(@num:=(case when @group=openid then @num+1   else 1 end)) as row_number,@group:=openid as groupOpenid  FROM ims_mdkeji_chatsingle_room_private  ORDER BY openid,Id desc

 

2,group by 在order之前执行,导致获取的是排序在前面的那一行数据

 

3,(@num:=IF(@group = openid, @num +1, IF(@group := openid, 1, 1))) row_number这一行数据,从左往右执行,注意顺序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunphp开发者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值