mysql where后面的in查询默认排序问题

mysql在select的时候,如果where后面是in结构,查询出来的结果不会按in里面的数据顺序进行返回,而是有默认的排序。通常用到in的时候,是在update做批量更新的时候,这种情况不需要查询in结构里面的数据,所以不会出现数据紊乱的情况。但是,如果需要获取多条数据,并且这多条数据,在数据库中不是自然顺序的时候,select出来的数据会对查询出来的数据进行默认的排序,经自身的测试,应该是按照某字段的升序排序(测试不是很严谨,仅直观的感受)。比如用in(2,3,5,4,7,6,10,9,8)来查询数据(in结构中的数据是ID值),查询出来的结果顺序是以ID顺序2,3,4,5,6,7,8,9,10来返回的。如果程序中要对select出来的数据再进行处理,那在处理ID=5的时候,其实处理的是ID=4的记录数据,同样地,处理ID=4的时候,其实处理的是ID=5的数据,这样就把数据库ID=4的数据计算结果值给了程序中ID=5的情况。这样就出现了“张冠李戴”的现象。

解决办法:亲测都可行。

第一种:order by find_in_set(ID,'2,3,5,4,7,6,10,9,8')

例子:SELECT * from tb_check WHERE ID in (2,3,5,4,7,6,10,9,8) ORDER BY FIND_IN_SET(ID,'2,3,5,4,7,6,10,9,8')

第二种:order by substring_index('2,3,5,4,7,6,10,9,8',ID,1)

例子:SELECT * from tb_check WHERE ID in (2,3,5,4,7,6,10,9,8) ORDER BY SUBSTRING_INDEX('2,3,5,4,7,6,10,9,8',ID,1)

第三种:order by field

SELECT * from tb_check WHERE ID in (2,3,5,4,7,6,10,9,8) ORDER BY FIELD(ID,2,3,5,4,7,6,10,9,8)(注意:这里没有单引号)

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值