次のようなMySQLスクリプトがあります。SELECT id, name FROM users WHERE id IN (6,4,34)
IN(...) 配列の順序は非常に重要です。指定された順序でそれらを取得することは可能ですか?
MySQLFIELD
関数を使用してコンパクトに保つことができます。
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)
ORDER BY 句では、「CASE」を含む任意の式を使用できます。
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';
ただし、ヨアヒムの答えは非常にエレガントであることに言及します:-)