我的sql小提琴:http://sqlfiddle.com/#!9/012138/1
我有以下表格:
产品(表)
id INT(10) productname VARCHAR(50) statusid INT(10)
假设我们有以下记录:
id productname statusid
5 P1000 2
6 P2000 1
7 P3000 3
现在您可以看到状态ID是1,2,3。我希望按照状态ID获取记录,但是我们存储的状态ID是以不同的方式,所以我不能直接通过statusid按顺序编写查询。因为我需要按照以下状态ID顺序获取记录
首先是statusid 3,然后是状态ID 1然后是状态ID 2.如何编写查询?
答案 0 :(得分:3)
您可以尝试使用FIND_IN_SET
SELECT
*
FROM products
ORDER BY FIND_IN_SET(statusid,'3,1,2')
注意:强>
在此处添加自定义序列FIND_IN_SET(statusid,'3,1,2')
关于FIND_IN_SET
的简要说明:
<强>描述强>
MySQL FIND_IN_SET()
返回字符串的位置,如果它在字符串列表中存在(作为子字符串)。字符串列表本身是一个字符串,包含以','(逗号)字符分隔的子字符串。
当字符串列表中不存在搜索字符串时,此函数返回0,如果任一参数为NULL
,则返回NULL
。
<强>语法强>
FIND_IN_SET (search string, string list)
<强>参数强>
Name Description
search string A string which is to be looked for in following list of arguments.
string list List of strings to be searched if they contain the search string.
或者,您可以使用FIELD()
函数来完成
答案 1 :(得分:2)