2014-05-09 95 views
2

給我有一個表像之下,ID是主鍵如何獲得查詢結果順序相同條款

 ID Name 
     1 a 
     2 b 
     3 c 
     4 d 
     5 e 

,並有一個查詢像下面。這個查詢是在用戶輸入選擇的php文件中創建的。

select name from table where id in (1,5,3) 

我得到結果(「a」,「c」,「e」),我猜是正常的,因爲默認的主鍵排序順序。但是我希望結果按照「in」子句的順序排序。所以我想要返回的值是(「a」,「e」,「c」)。有什麼辦法讓它在MySQL中。

+0

您可以使用聯合加入的一種方式結果是從UI端選擇的訂單 – avisheks

+0

是jensgram。這是一個dup。憤怒的公牛的回答也和你那邊的一樣。我很好奇爲什麼我之前沒有找到它,可能是因爲所有相關的關鍵字「mysql」,「sort」,「order」,「in」都是非常通用的。謝謝。 – John

回答

5

您可以簡單地使用FIELD()

select name from TableName where id in (1,5,3) 
ORDER BY field(id,1,5,3) 

結果:

NAME 
a 
e 
c 

查看結果在SQL Fiddle

+2

我從來不需要使用類似的東西,我也不知道現場操作員的那種類型。很有用。 – fmgonzalez

+1

這太棒了。我從來沒有真正料到它會那麼容易。非常感謝。 – John

2

可以使用CASE運營商指定的順序:

在PHP
SELECT * FROM table 
WHERE id IN (3,6,1,8,9) 
ORDER BY CASE id WHEN 3 THEN 1 
       WHEN 6 THEN 2 
       WHEN 1 THEN 3 
       WHEN 8 THEN 4 
       WHEN 9 THEN 5 
     END 

u能做到這一點,如:

<?php 

$my_array = array (3,6,1,8,9) ; 

$sql = 'SELECT * FROM table WHERE id IN (3,6,1,8,9)'; 

$sql .= "\nORDER BY CASE id\n"; 
foreach($my_array as $k => $v){ 
    $sql .= 'WHEN ' . $v . ' THEN ' . $k . "\n"; 
} 
$sql .= 'END '; 

echo $sql; 

?> 
相關問題