mysql 5.6升级到5.7之后 子查询里面的order排序无效

mysql5.7以及以后版本将会对order 语句有默认的规则,因此 在子查询内部 使用order by 可能会被忽略。网上解决的方法啊大多数是在子查询 的order by xxx desc 后增加 limit 99999. 

本地测试如下:

select tab_.*,ias.name as studio_name from (SELECT adp.id ,adp.creator as creator,adp.online_time,adp.name as name,adpp.day_profit,adpp.week_profit,adpp.month_profit,adpp.total_asset as total_profit,adp.subscription_num,adp.updatetime,ad.real_name as adname,'免费' as type,adp.is_online from table adp LEFT JOIN tableadpp adpp ON adp.id =adpp.portfolio_id LEFT JOIN table ad on adp.creator =ad.id WHERE adp.approve_status=1  ORDER BY  total_profit desc, adp.id  DESC  limit 99999)tab_ left join table ia on tab_.creator=ia.id left join iadvisor_studio ias on ia.studio_id=ias.id where 1=1 and ias.status=1  limit 0,20

然而并没有出现任何好转,排序依然无效。

最后解决方法是 讲 order by 从子查询中提取到 外面 

select tab_.*,ias.name as studio_name from (SELECT adp.id ,adp.creator as creator,adp.online_time,adp.name as name,adpp.day_profit,adpp.week_profit,adpp.month_profit,adpp.total_asset as total_profit,adp.subscription_num,adp.updatetime,ad.real_name as table,'免费' as type,adp.is_online from table adp LEFT JOIN table adpp ON adp.id =adpp.portfolio_id LEFT JOIN table ad on adp.creator =ad.id WHERE adp.approve_status=1  )tab_ left join table ia on tab_.creator=ia.id left join iadvisor_studio ias on ia.studio_id=ias.id where 1=1 and ias.status=1  ORDER BY  total_profit desc, adp.id  DESC  

如上 解决!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值