1

検索機能用の MySQL クエリを作成していますが、ID の配列を使用して特定の方法で結果を並べ替えたいと考えています。

これは、次のような MySQL の一部を使用して行うことができました。

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1) 
ORDER BY FIELD(id, 77, 3, 123, 1)

しかし、Selectクエリ内で設定すること、Order by FIELDまたは設定しないことで可能かどうか疑問に思っています。FIND_IN_SETIN()

ID の配列にない結果も期待されるため、IN() ステートメントは使用したくありません。

うまくいけば、誰かが私を正しい方向に押し進めることができます.

4

2 に答える 2

2

評価を 1 つだけにしたい場合は、順序を逆にしfield()て使用することができます

SELECT id, name
FROM mytable 
ORDER BY FIELD(id, 1, 123, 3, 77) desc

元のクエリよりもかなりの時間がかかります。これfield()は、よりも高価であり、一部の行だけでなくすべての行INを評価する必要があるためです。field()

代わりに使用することもできます

SELECT id, name, FIELD(id, 77, 3, 123, 1) as orderno
FROM mytable 
WHERE id IN (77, 3, 123, 1) 
union 
SELECT id, name, 99999999
FROM mytable 
WHERE id NOT IN (77, 3, 123, 1)
order by orderno, id

これは、配列のサイズによっては高速になる可能性がありますが、テストする必要があるため、さらに悪化する可能性があります。

于 2016-07-31T14:48:38.913 に答える
2
SELECT id, name
FROM mytable 
ORDER BY id NOT IN (77, 3, 123, 1),
         FIELD(id, 77, 3, 123, 1)
于 2016-07-31T01:51:21.520 に答える