2013-02-17 39 views
1

我有一個MySQL這樣的腳本:SELECT id, name FROM users WHERE id IN (6,4,34)mysql命令由數組

在IN(...)的順序排列是非常重要的。是否有可能讓他們在給定的序列?

回答

1

你可以使用任何表達ORDER BY子句中,包括一個「案例」:

ORDER BY CASE id 
    WHEN 6 THEN 1 
    WHEN 4 THEN 2 
    WHEN 34 THEN 3 
END ASC 

如果你的列表來自應用程序層,則可能是以下(PHP這裏)建立這樣的:

$sortVal = 1; 
foreach($ids as $id_val) { 
    $cases[] = sprintf('WHEN %i THEN %i', $id_val, $sortVal++); 
} 
$order_by = 'ORDER BY CASE id ' . implode($cases) . ' END ASC'; 

不過,我會提的是勒夫的回答也相當考究:-)

+0

謝謝,但我不知道以前的號碼。我用implode(「,」,$ array)得到數組 – friction 2013-02-17 17:10:43

+0

@friction我添加了一些示例代碼來展示我如何構建CASE子句。 – 2013-02-17 17:22:29

9

可以使用MySQL FIELD function以保持其緊湊;

SELECT id, name 
FROM users 
WHERE id IN (6, 4, 34) 
ORDER BY FIELD(id, 6, 4, 34); 
3

嘗試

SELECT id, name FROM users WHERE id IN (6,4,34) order by FIELD(id,6,4,34)