web-dev-qa-db-ja.com

MySQL ORDER BY IN()

PHP配列にIDの番号が含まれています。これらの番号は既に注文されています。

ここで、すべてのIDを取得するために、IN()メソッドを介して結果を取得したいと思います。

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

例えば:

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

次のような結果が得られます。

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

助言がありますか?たぶんこれを行う機能がありますか?

ありがとう!

63
Henk Denneboom

関数 [〜#〜] field [〜#〜] -を探しているのではないかと思いますが、通常は文字列関数と考えられていますが、数値に対しても正常に機能します。

ORDER BY FIELD(field_name, 3,2,5,7,8,1)
139
Alex Martelli

FIELD() を使用できます。

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

Str1、str2、str3、...リスト内のstrのインデックス(位置)を返します。 strが見つからない場合は0を返します。

ただし、これは一種のhackいハックなので、他に選択肢がない場合にのみ実際に使用してください。アプリの出力を並べ替えることをお勧めします。

8
deceze

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

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

他の可能性(私は好きではありませんが、選択肢を与えることは名誉なことです)は、データベースに複数の旅行を行い(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.
0
paxdiablo