表結構
表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);