2016-08-02 66 views
2
SELECT * FROM `students` WHERE `id` IN (83,84); 

上面的查詢按照查詢給出了asc命令的結果,但是當我改變83的命令被84代替而84被83代替時它又給我asc命令的結果。我想根據查詢顯示結果。如何使用IN子句顯示結果?

+0

IN中的順序與記錄的顯示順序無關 – Jens

+1

' order by FIELD(id,83,84)',如果你想讓84成爲第一個然後按字段順序(id,84,83)' –

回答

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()功能來實現這一目標

+0

感謝兄弟,它的工作。非常感謝 –

+1

**可能關注的人:**無法找到被低估的原因。這是我發誓的方式之一!如果我能知道原因,我會很高興。謝謝! – 1000111

+0

@ 1000111我認爲你的答案是正確的,不知道爲什麼它已經downvoted,find_in_set和查找函數是相同的在這種情況下... – fthiella

1

您可以使用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); 
1

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.