人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLの質問です。

データを表示する際に自分の好きな順番で表示する方法はありますか?

例えば、フィールド1が5or2or4の3つのレコードをSQL文でWHERE フィールド1 IN ( '5', '2', '4' )で出力した場合に普通に表示すると2,4,5の順番になってしまいます。

どうしても5,2,4(例えなので違う順番の場合もあります)の順番で表示したいのですがどうすればよいでしょうか…

ORDER BYを使うことも出来ず何か良い方法が無いか考えています。

誰か分かる人がいたらお願いします。
一応、PHPも使えるのでPHPで解決するのであればそれでも良いです。

●質問者: black_kenchan
●カテゴリ:ウェブ制作
✍キーワード:MySQL PHP SQL データ フィールド
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● studioes
●10ポイント

>2,4,5の順番になってしまいます。

2,4,5になっているわけではなく、DBに入っている順序が2,4,5なのだと思います。

順番は一切関係なく、検索していって一致した順番で返すので、UPDATE文などを使うと、5,2,4になることもあるでしょう。

レコードのフィールド1が5か2か4であれば選択、と言う事ですから。

>どうしても5,2,4(例えなので違う順番の場合もあります)の順番で表示したいのですがどうすればよいでしょうか…

おとなしく、フィールド1='5'とフィールド1='2'、フィールド1='4'で選択して、結果を順番に表示しましょう。 簡単確実で早いです。

PHPであれば、

$f1array = array(5,2,4);

foreach($f1array as $f1){

mysql_query("sql... where フィールド1='{$f1}'");

出力処理

}

みたいな感じで。

◎質問者からの返答

有難う御座いました。


2 ● kunyami
●60ポイント ベストアンサー

ちょっと強引ですが

-----

select

  case フィールド1

    when '5' then 1

    when '2' then 2

    when '4' then 3

  end as odr,

  フィールド1

from テーブル1

where フィールド1 in ('5', '2', '4')

order by odr;

-----

などとしてはいかがでしょうか?

当方MySQL 5.0では動きました。

◎質問者からの返答

ズバリこれでした!!

有難う御座います。

勉強になりました。


3 ● huruyosi
●10ポイント

表示順を持つ別テーブルと結合して、結合したテーブルの列でソートする方法はいかがですか?

例えば

FROM tbl1 inner join sortOrderTbl on tbl1.フィールド1 = sortOrderTbl.フィールド1

WHERE tbl1.フィールド1 in ( '5','2','4')

ORDER BY sortOrderTbl.ソート順のフィールド

◎質問者からの返答

有難う御座いました。


4 ● chuken_kenkou
●10ポイント

SQL文でWHERE フィールド1 IN ( '5', '2', '4' )で出力した場合に普通に表示すると2,4,5の順番になってしまいます

「order by」の指定がない場合の検索順序は、保証されていません。格納順や「primary key」順といったことも、保証されていません。

「保証していないと言っているが、実は格納順になるのでは?」と実験結果を示したユーザサイトもありますが、「やはり保証されない」という結論になっています。

追加や削除を繰り返せば、「order by」指定が必要なことを、すぐに理解できると思います。

特定の順序で結果を得たいなら、「order by」を指定するしかありません。

select ?
 from 表名
 where フィールド1 in('5','2','4')
 order by
 case フィールド1
 when '5' then 1
 when '2' then 2
 when '3' then 3
 end
|< 
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ