SELECT * FROM `students` WHERE `id` IN (83,84);
根据查询,上面的查询给了我asc顺序的结果,但当我改变顺序时,比如83被84替换,84被83替换,它再次给了我esc顺序结果。我想根据查询显示结果。
您可以按子句的顺序使用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()
函数来实现
您可以使用FIELD
:
SELECT *
FROM `students`
WHERE `id` IN (83, 84)
ORDER BY FIELD(`id`, 83, 84);
SQL行不会以任何特定的顺序返回,除非您通过子句指定了顺序:
SELECT * FROM `students` WHERE `id` IN (83,84) ORDER BY ID asc
是的,有时MySQL会返回按主键排序的行,有时它会遵循插入顺序,但这并不能保证。
如果要返回按IN元素排序的行,则必须指定ORDERBY,诀窍是使用FIELD字符串函数:
SELECT * FROM `students` WHERE `id` IN (83,84)
ORDER BY FIELD(id, 83, 84)
数字将自动转换为字符串,FIELD(83,83,84(将返回1,FIELD将返回2,其他任何值都将返回0。