2012-09-17 60 views
1

我如何可以使用語句時訂購的結果我得到的數組中ID的順序:PHP MySQL的排序結果拿來

SELECT ID,名稱從表WHERE ID IN(23, 33,55,2)

我想:

+----+---------+ 
| id | name | 
+----+---------+ 
| 23 | name1 | 
| 33 | name2 | 
| 55 | name3 | 
| 2 | name4 | 
+----+---------+ 
順序

+0

只是爲了澄清,他試圖實現的是對CSV的CSV列表進行排序。因此,例如'(23,33,55,2)'和'(2,55,33,23)'將按順序返回ID。不僅僅是通過id desc/asc進行排序。 –

回答

6

只需在您的查詢的末尾添加此:

order by field(id, 23, 33, 55, 2) 
+1

謝謝!這是我需要的 – Raz

1

你可以嘗試這樣的事:

SELECT t.id,t.name 
from 
    (select 23 as id,1 as rnk union all 
    select 33 as id,2 union all 
    select 55 as id,3 union all 
    select 2 as id,4)input 
join table t 
on t.id=input.id 
order by input.rnk 
1

SELECT id,name from table WHERE id IN (23, 33, 55, 2) ORDER BY id = 23 DESC, id = 33 DESC, id = 55 DESC, id = 2 DESC不是數據庫具體的解決方案,但仍然有效

+1

有趣的方法:)也有可能:'ORDER BY id!= 23(ASC),id!= ...' – knittl

+0

當我需要訂購一個奇怪的字段組合時,我使用它,說這是一個非常複雜的查詢,寫 – xception

+0

包括答案,以防他實際上想要更復雜的東西,但試圖給一個簡化的例子,並且字段方法不起作用 – xception

2

你可以嘗試使用JOIN。不保證按此順序返回,但對於MySQL,大多數情況下都適用:

SELECT table.id, table.name 
FROM ( 
    SELECT 23 id UNION SELECT 33 id UNION SELECT 55 id UNION SELECT 2 
) a 
JOIN table 
ON a.id = table.id 

您的訂單如何確定?如果你可以提供排序功能,那麼它很容易。

+0

+1這是我要去的地方。我不確定,如果數據庫會根據它自己的興趣按照順序返回行或者按照子查詢中的聯合來執行? – Fluffeh

+0

@Fluffeh:好吧,聯盟審查的「自己的心血來潮」就是書面命令。而且MySQL通常會像加入時一樣離開訂單(儘管它不必,而且SQL通常在集合上運行 - 即沒有確定性排序) – knittl

2

SELECT ID,從表名WHERE ID IN(23,33,55,2)按字段(ID,2,23,33,55)