mysql update order_mysql5.7中的一个update order by排名问题解决办法(一条sql搞定排名)...

在作排序时,发现update中的orderby 不起作用,业务功能:按照syl字段进行降序排名:

在mysql5.6版本中运行的sql如下:

UPDATE (SELECT @a := @a + 1 AS rn, id, syl

FROM t_user_syl h, (SELECT @a := 0

) t where h.day=${day}

ORDER BY syl desc

) t1, t_user_syl t2

SET t2.syl_pm = t1.rn

WHERE t2.id = t1.id

在生产发布时,发现排序不正确(mysql5.7)!经分析,应该是order by 执行的顺序问题,改写sql如下:

UPDATE (SELECT @a := @a + 1 AS rn, id, syl

FROM (

select * from t_user_syl

where day=${day}

ORDER BY syl desc

) h, (SELECT @a := 0 ) t

) t1, t_user_syl t2

SET t2.syl_pm = t1.rn

WHERE t2.id = t1.id;

就是把orderby放到最里面,先排好序,然后再生成排名rn!

这就是5.7作了重要改进后遇到的问题,我们在写这类sql时最好还是按改进的sql方法来写!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值