SELECT * FROM `students` WHERE `id` IN (83,84);
上面的查询根据查询给出了asc命令的结果,但是当我改变时,83的顺序被替换为84而84被83替换它再次给我asc命令结果。我想根据查询显示结果。
答案 0 :(得分:1)
您可以按顺序使用find_in_set
:
SELECT
*
FROM `students`
WHERE `id` IN (83,84)
ORDER BY FIND_IN_SET(id,'83,84')
关于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 :(得分:1)
您可以使用FIELD
:
SELECT *
FROM `students`
WHERE `id` IN (83, 84)
ORDER BY FIELD(`id`, 83, 84);
答案 2 :(得分:1)
除非您指定order by子句,否则不会以任何特定顺序返回SQL行:
SELECT * FROM `students` WHERE `id` IN (83,84) ORDER BY ID asc
是的,有时MySQL会返回主键排序的行,有时它会遵循插入顺序,但这不能保证。
如果要返回由IN元素排序的行,则必须指定ORDER BY,一个技巧是使用FIELD字符串函数:
SELECT * FROM `students` WHERE `id` IN (83,84)
ORDER BY FIELD(id, 83, 84)
数字将自动转换为字符串,FIELD(83,83,84)将返回1,FIELD(84,83,84)将返回2,其他任何内容将返回0。