5

次のようなMySQLスクリプトがあります。SELECT id, name FROM users WHERE id IN (6,4,34)

IN(...) 配列の順序は非常に重要です。指定された順序でそれらを取得することは可能ですか?

4

4 に答える 4

13

MySQLFIELD関数を使用してコンパクトに保つ​​ことができます。

SELECT id, name 
FROM users 
WHERE id IN (6, 4, 34)
ORDER BY FIELD(id, 6, 4, 34);
于 2013-02-17T17:10:27.547 に答える
3

試す

SELECT id, name FROM users WHERE id IN (6,4,34) order by FIELD(id,6,4,34)
于 2013-02-17T17:11:04.363 に答える
1

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';

ただし、ヨアヒムの答えは非常にエレガントであることに言及します:-)

于 2013-02-17T17:05:19.803 に答える