[实践OK]Mysql FIND_IN_SET 语句原始排序  ,如何实现按 where in () 中的顺序排序,mysql select in 按照in后面id的顺序读取数据

jackxiang 2014-9-11 17:00 | |
背景:我查一些按顺序的uuid,后用select in(uuid,uuid2...),查出来的顺序是按uuid ,uuid2么?会不会出现不一致的情况。

select * from table_name where id in ()的时候,MySQL会自动按主键自增排序,要是按给定的顺序来取,如何实现呢?

select * from table_name where id in (122,1,5,323,23,1200) order by find_in_set(id, '122,1,5,323,23,1200')
这样读取出来的顺序为 122,1,5,323,23,1200

来自:http://blog.163.com/zhaoyingzhaoying@yeah/blog/static/168024152201110149140931/
示例:


Mysql FIND_IN_SET 语句原始排序:
find_in_set()
问:
mysql中怎么按in语句中的id顺序取数据
select * from ecs_goods where goods_id in (14,1,33,23)
按14,1,33,23这个顺序取
答:
在程序中,$idList='14,1,33,23';
select * from ecs_goods where goods_id in ($idList) order by FIND_IN_SET(goods_id,'$idList')

来自:http://jianzhong5137.blog.163.com/blog/static/9829049201201421430839/


注意,这个find_in_set单条记录没问题,比如唯一id的in。多条记录order会失效(instr也不全行,大部分可以,不过对于特殊的,比如CD是会认为C也在里面的情况。):
select * from act_log where answer in ('B','C','CD') order by instr( "'B','C','CD'",answer)
正确排序: B,B,C
select * from act_log where answer in ('B','C','CD') order by find_in_set( answer,"'B','C','CD'")
排序错误:CD,C,BB,C。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/7475/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2014-9-12 09:52
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]