SELECT * FROM `students` WHERE `id` IN (83,84);
上面的查詢按照查詢給出了asc命令的結果,但是當我改變83的命令被84代替而84被83代替時它又給我asc命令的結果。我想根據查詢顯示結果。如何使用IN子句顯示結果?
SELECT * FROM `students` WHERE `id` IN (83,84);
上面的查詢按照查詢給出了asc命令的結果,但是當我改變83的命令被84代替而84被83代替時它又給我asc命令的結果。我想根據查詢顯示結果。如何使用IN子句顯示結果?
您可以通過子句中才能使用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 ID asc
是的,有時MySQL將返回由命令行:除非你by子句指定的順序
SELECT *
FROM `students`
WHERE `id` IN (83, 84)
ORDER BY FIELD(`id`, 83, 84);
SQL行不會以任何特定的順序返回,主鍵,有時它會按照插入順序,但這不能保證。
如果你想返回由IN元素有序行,你必須指定一個ORDER BY,一招是使用字段字符串函數:
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.
IN中的順序與記錄的顯示順序無關 – Jens
' order by FIELD(id,83,84)',如果你想讓84成爲第一個然後按字段順序(id,84,83)' –