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);

 

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