mysql where id in 排序 按in的顺序排序

select id fromtablewhere id in(2,1,3,5)order bysubstring_index(‘2,1,3,5’,id,1);
substring_index(str,delim,count) 字符串截取函数
str 要截取的字符串 delim 截取的分割符 count 截取的数量
返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。
那 order by substring_index(‘2,1,3,5′,id,1) 这个啥意思呢
这个是在字符串’2,1,3,5′里查找id,如果找不到,就返回整个字符串select id fromtablewhere id in(2,1,3,5)order by find_in_set(id,‘2,1,3,5’)
find_in_set(str,strlist)
字符串函数
如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。如果str不是在strlist里面或如果strlist是空字符串,返回0。

SELECT FIND_IN_SET(‘b’,‘a,b,c,d’);
->2
所以 find_in_set返回的是一个1到N的值,在order by的话,就是按顺序排了。

此句测试中id为主键,type一直为all,不知是有优化方法?

 

另一种,没有试过(收藏一下)

SQL: select * from table where id IN (3,6,9,1,2,5,8,7);
这样的情况取出来后,其实,id还是按1,2,3,4,5,6,7,8,9,排序的,但如果我们真要按IN里面的顺序排序怎么办?SQL能不能完成?是否需要取回来后再foreach一下?
其实可以这样
sql: select * from table where id IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7);
出来的顺序就是指定的顺序了

 

 

项目 中用到

$order = “order by substring_index(‘$ids’,g.goods_id,1)”;//按in 排序用

Leave a Reply

Your email address will not be published.