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)
(注意:这里没有单引号)
共 0 条回复
PHP学院的中学生
最后登录:2024-09-23
在线时长:168小时13分
- 粉丝29
- 金钱4725
- 威望30
- 积分6705