表结构
表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);