mysql 实现分组显示行数

表结构

表kn_tmp

表kn_tmp_site

 

业务说明:

kn_tmp中保存的是“通知”,每个通知有的id,和创建时间createTime。

kn_tmp_site的noticeId对应的是kn_tmp的id字段。siteCode是站点。一个通知有可能对应着多个站点。displayOrder是顺序字段。现在displayOrder内容不正确,需要按照添加的先后顺序倒叙排序。最新添加的排列到前面。

 

 

解决问题的sql语句

正确的排序如下


select kk.noticeId,kk.siteCode,kk.createTime, case when @lastCode=kk.siteCode then @rank:=@rank+1 else 0 end as displayOrder,case when @lastCode<>kk.siteCode then @rank:=0 end,@lastCode:=kk.siteCode from
(select a.*,b.*  from kn_tmp a,kn_tmp_site  b where a.id=b.noticeId order by b.siteCode,a.createTime) kk,(select @rank:=0, @lastCode := '') gg

 

更新表的displayOrder字段

-- 原来的通知按照时间倒叙排序。
update kn_tmp_site set displayOrder=(
select displayOrder from (

select kk.noticeId,kk.siteCode,kk.createTime, case when @lastCode=kk.siteCode then @rank:=@rank+1 else 0 end as displayOrder,case when @lastCode<>kk.siteCode then @rank:=0 end,@lastCode:=kk.siteCode from
(select a.*,b.*  from kn_tmp a,kn_tmp_site  b where a.id=b.noticeId order by b.siteCode,a.createTime) kk,(select @rank:=0) gg

) tmp where tmp.noticeId=kn_tmp_site.noticeId and tmp.siteCode=kn_tmp_site.siteCode);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章