如何使用IN子句显示结果?

时间:2016-08-02 07:23:37

标签: mysql mysqli

SELECT * FROM `students` WHERE `id` IN (83,84);

上面的查询根据查询给出了asc命令的结果,但是当我改变时,83的顺序被替换为84而84被83替换它再次给我asc命令结果。我想根据查询显示结果。

3 个答案:

答案 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.

Related post

或者,您可以使用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。