mysql 字段自定义排序问题

2016-09-13 16:13:27

今天碰到一个问题,指定mysql字段自定义排序

SELECT id FROM table  WHERE `id` IN (40593,6352,38120,56049,56050,56051);

外事不决问google,经过搜索,网上的建议是使用FIELD()和FIND_IN_SET():

SELECT id FROM table  WHERE `id` IN (40593,6352,38120,56049,56050,56051) order by FIELD(id,6352,38120)desc ;

SELECT id FROM table  WHERE `id` IN (40593,6352,38120,56049,56050,56051) order by FIND_IN_SET(username,"6352,38120");

继续google之,又找到一个建议,使用substring_index:

substring_index(str,delim,count) str:要处理的字符串 delim:分隔符 count:计数

str=www.google.com
substring_index(str,’.’,1)
结果是:www
substring_index(str,’.’,2)
结果是:www.google
即如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容
相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容,如:
substring_index(str,’.’,-2)
结果为:google.com
有人会说,如果我要中间的google怎么办?
很简单的,两个方向:
1、从右数第二个分隔符的右边全部,再从左数的第一个分隔符的左边:
substring_index(substring_index(str,’.’,-2),’.’,1);
2、你懂得!

SELECT id FROM table  WHERE `id` IN (40593,6352,38120,56049,56050,56051) order by substring_index('40593',username,1);

完美解决,更多详细讨论请移步官网讨论


您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。