私はこのようなmysqlを持っています
SELECT * FROM table WHERE id IN(3245,76,3466,998,12984,4466,931,50,728)
ID が IN 句にある順序で並べ替えられたクエリの結果を取得する方法はありますか?
どうもありがとう
更新:この質問がここでカバーされていることがわかりました が、私の IN 句には最大 5000 個の ID が含まれているため、「FIELD」を使用するのが最善の解決策でしょうか?
私はこのようなmysqlを持っています
SELECT * FROM table WHERE id IN(3245,76,3466,998,12984,4466,931,50,728)
ID が IN 句にある順序で並べ替えられたクエリの結果を取得する方法はありますか?
どうもありがとう
更新:この質問がここでカバーされていることがわかりました が、私の IN 句には最大 5000 個の ID が含まれているため、「FIELD」を使用するのが最善の解決策でしょうか?
ID のシーケンスを繰り返しても構わない場合は、ORDER BY FIELD を使用するとうまくいくはずです。
SELECT * FROM table WHERE id IN(3245,76,3466,998,12984,4466,931,50,728)
ORDER BY FIELD (id,3245,76,3466,998,12984,4466,931,50,728)
@vyegorov がコメントで指摘したように、多数の ID の場合、実際の注文を保持するために一時テーブルを作成する必要がある場合があります。
CREATE TEMPORARY TABLE `temp_sort` (
`id` INT NOT NULL ,
`seq` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( `seq` ) ,
UNIQUE ( `id` )
);
INSERT INTO temp_sort (id) VALUES (3245),(76),(3466);
SELECT * FROM table
INNER JOIN temp_sort ON (temp_sort.id=table.id)
ORDER BY temp_sort.seq;
IN 句には最大 5000 個のアイテムがあるため、含めたい ID のリストを含む別のテーブルを作成する必要があります。そのテーブルに注文列を入れてから、内部結合を行い、注文列で並べ替えます。それは両方の問題を解決します。
そのようです:
SELECT table.*
FROM table
INNER JOIN tblIDs ON tblIDs.id = table.id
ORDER BY tblIDs.OrderValue
新しいテーブル (tblIDs) は次のようになります。
id OrderValue
3245 1
76 2
3466 3
id 列で INNER JOIN を実行すると、リストされた id 番号のいずれかを持つ元のテーブルの行のみが表示されるようになります。OrderValue 列を使用すると、クエリを簡単かつ効率的に並べ替えることができます。また、クエリをハッキングせずに並べ替え順序を簡単に変更することもできます。
これをやってみてください。
SELECT your_column_name * FROM table WHERE id IN(3245,76,3466,998,12984,4466,931,50,728)
ORDER BY your_column_name
それらのIDを属性にしない限り、そうではありません。それでも、あなたが持っているように順不同ではなく、昇順/降順で並べられます。