我有一個MySQL這樣的腳本:SELECT id, name FROM users WHERE id IN (6,4,34)
mysql命令由數組
在IN(...)的順序排列是非常重要的。是否有可能讓他們在給定的序列?
我有一個MySQL這樣的腳本:SELECT id, name FROM users WHERE id IN (6,4,34)
mysql命令由數組
在IN(...)的順序排列是非常重要的。是否有可能讓他們在給定的序列?
你可以使用任何表達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';
不過,我會提的是勒夫的回答也相當考究:-)
可以使用MySQL FIELD
function以保持其緊湊;
SELECT id, name
FROM users
WHERE id IN (6, 4, 34)
ORDER BY FIELD(id, 6, 4, 34);
嘗試
SELECT id, name FROM users WHERE id IN (6,4,34) order by FIELD(id,6,4,34)
謝謝,但我不知道以前的號碼。我用implode(「,」,$ array)得到數組 – friction 2013-02-17 17:10:43
@friction我添加了一些示例代碼來展示我如何構建CASE子句。 – 2013-02-17 17:22:29