77

ID の数を含む PHP 配列があります。これらの番号はすでに注文されています。

ここで、IN() メソッドを使用して結果を取得し、すべての ID を取得したいと考えています。

ただし、これらの ID は IN メソッドのように順序付けする必要があります。

例えば:

IN(4,7,3,8,9)  

次のような結果が得られるはずです。

4 - Article 4  
7 - Article 7  
3 - Article 3  
8 - Article 8  
9 - Article 9

助言がありますか?多分これを行う機能がありますか?

ありがとう!

4

4 に答える 4

163

I think you may be looking for function FIELD -- while normally thought of as a string function, it works fine for numbers, too!

ORDER BY FIELD(field_name, 3,2,5,7,8,1)
于 2009-08-26T05:16:01.140 に答える
10

You could use FIELD():

ORDER BY FIELD(id, 3,2,5,7,8,1)

Returns the index (position) of str in the str1, str2, str3, ... list. Returns 0 if str is not found.

It's kind of an ugly hack though, so really only use it if you have no other choice. Sorting the output in your app may be better.

于 2009-08-26T05:18:40.993 に答える
0

標準 SQL はこれを行う方法を提供していません (MySQL は可能ですが、いつでも DBMS を切り替えることができるように、ベンダーに依存しないソリューションを好みます)。

これは、結果セットが返された、後処理で行う必要があります。SQL は、"order by" 句で指定された順序 (または、そのような句がない場合は任意の順序) でのみそれらを返すことができます。

もう 1 つの可能性 (私はそれが好きではありませんが、私はあなたに選択を与える義務があります) は、ID ごとに 1 つずつ、データベースに複数の旅行を行い、それらが入ってくると処理することです。

select * from tbl where article_id = 4;
// Process those.
select * from tbl where article_id = 7;
// Process those.
: : : : :
select * from tbl where article_id = 9;
// Process those.
于 2009-08-26T05:13:07.417 に答える
-2

ステートメントごとに正しい順序を指定するだけです。

SELECT ID FROM myTable WHERE ID IN(1,2,3,4) ORDER BY ID

例のように、データを順序付けずに並べ替えたいのはなぜですか?

長いクエリを連結しても構わない場合は、次の方法を試してください。

SELECT ID FROM myTable WHERE ID=1
UNION
SELECT ID FROM myTable WHERE ID=3
UNION
SELECT ID FROM myTable WHERE ID=2
于 2009-08-26T05:12:05.843 に答える