我想按照它们出现在(非常大的)字符串中的顺序来排序我的结果。为了这个问题,我将该字符串限制为5个条目。
例如:
select * from table where value in ("banana","apple","pineapple","cherry","mango")
我想按照它们出现在该字符串中的顺序来排序这些结果。现在很明显只有5个结果可以使用CASE WHEN等,但是更长的字符串(例如1000个值)如何才能实现?
感谢。
答案 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