プロが教えるわが家の防犯対策術!

MySQLでINで抽出した順番で並び替えて表示したいのですが、簡単に行う方法はありませんか?

[例]
SELECT ID,NAME FROM TABLE WHERE ID IN (5,7,3);
このSELECT文の抽出結果を5,7,3の順番に並び替えたいのです。

もちろん力技で行うこと(1つずつSELECTで抽出して表示)は可能なのですが、あまりにもスマートではないので・・・。

A 回答 (4件)

>FIELDの商品コードを'で囲んだところ、


>エラーは出なくなりましたが並び替えは上手くいきませんでした。

「'」(アポストロフィー)で囲んでしまうと、文字定数となるので、FIELD関数は正しく動作しません。
予約語と同じキーワードを使う場合は、「`」(バッククォート)を使いますが、今回は日本語の列名ということで該当しません。

MySQL 5.0では、下記SQLで動作しました。

SELECT 商品コード,商品名
FROM 商品マスタ
WHERE 商品コード IN (5,7,3)
ORDER BY FIELD(商品コード,5,7,3);

マニュアルを見る限り、FIELD関数は昔からあるようです。#2回答者さんへのお礼にある「使えなかった」とは、具体的にどうなるのでしょうか?

下記のSQL例のように、CASEでも同様の結果を得られます。

SELECT 商品コード,商品名
FROM 商品マスタ
WHERE 商品コード IN (5,7,3)
ORDER BY CASE 商品コード WHEN 5 THEN 1 WHEN 7 THEN 2 WHEN 3 THEN 3 END;

なお、ORDER BYで列名でなく式を指定した場合、インデクスを使ったソート抑止は行えませんので注意してください。
→商品コードで絞り込んだ後なので、今回は問題ないとも思いますけどね。
    • good
    • 0
この回答へのお礼

構文エラーが出ていたのですが、
今再確認したところ無事に動作しました。

私のミスだったみたいです。
申し訳ありません。

詳細な説明をありがとうございました。

お礼日時:2007/01/09 00:28

MySQLのバージョンは?


表名は、「TABLE」なのですか?そうすると、「`」で囲まないと、予約語で構文エラーになると思いますが?

select `id`,`name`
from `table`
where `id` in(5,7,3)
order by field(`id`,5,7,3);

この回答への補足

SELECT 商品コード,商品名
FROM 商品マスタ
WHERE 商品コード IN (5,7,3)
ORDER BY FIELD('商品コード',5,7,3);

実際には↑こうです。
FIELDの商品コードを'で囲んだところ、
エラーは出なくなりましたが並び替えは上手くいきませんでした。

補足日時:2007/01/08 16:01
    • good
    • 1
この回答へのお礼

ソートすることができました。
ありがとうございました!

お礼日時:2007/01/09 00:29

SELECT ID,NAME FROM TABLE


WHERE ID IN (5,7,3)
ORDER BY FIELD( ID, 5,7,3 );

で、出来ます。ベストな方法かどうかは知りませんが。
    • good
    • 0
この回答へのお礼

> ORDER BY FIELD( ID, 5,7,3 );

これだけの記述で出来ればまさに望んだとおりなのですが、使えませんでした。

お礼日時:2007/01/08 13:59

他の列などで、ソートするための情報(規則)はあるのですか?


規則性がないなら、case式などで与えるしかありません。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
規則性はありません。
規則性というよりは「5,7,3」の配列に
従った並び順にしたいのです。

お礼日時:2007/01/08 13:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す