MySQL:ORDER BY在值字符串中的位置

时间:2017-03-14 08:37:15

标签: mysql

我想按照它们出现在(非常大的)字符串中的顺序来排序我的结果。为了这个问题,我将该字符串限制为5个条目。

例如:

select * from table where value in ("banana","apple","pineapple","cherry","mango")

我想按照它们出现在该字符串中的顺序来排序这些结果。现在很明显只有5个结果可以使用CASE WHEN等,但是更长的字符串(例如1000个值)如何才能实现?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以FIND_IN_SET()使用略有不同的查询

SELECT *
FROM table
WHERE value IN ("banana","apple","pineapple","cherry","mango")
ORDER BY FIND_IN_SET(value, 'banana,apple,pineapple,cherry,mango')
  

<强> FIND_IN_SET(str, strlist)

     

如果字符串str在,则返回1到N范围内的值   字符串列表strlist由N个子串组成。字符串列表是   字符串由子字符串组成的字符串组成。如果是第一个   参数是一个常量字符串,第二个是SET类型的列,   FIND_IN_SET()函数已经过优化,可以使用位运算。返回   如果str不在strlist中,或者strlist是空字符串,则为0。返回   如果任一参数为NULL,则为NULL。此功能无法正常工作   如果第一个参数包含逗号(,)字符。

mysql> SELECT FIND_IN_SET('b','a,b,c,d');
    -> 2