MySQLの質問です。


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

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

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

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

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

回答の条件
  • 1人50回まで
  • 登録:2007/09/12 01:00:24
  • 終了:2007/09/12 02:49:33

ベストアンサー

id:kunyami No.2

kunyami回答回数24ベストアンサー獲得回数42007/09/12 01:22:28

ポイント60pt

ちょっと強引ですが

-----

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では動きました。

id:black_kenchan

ズバリこれでした!!

有難う御座います。

勉強になりました。

2007/09/12 02:48:30

その他の回答(3件)

id:studioes No.1

studioes回答回数522ベストアンサー獲得回数612007/09/12 01:14:50

ポイント10pt

>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}'");

出力処理

}

 みたいな感じで。

id:black_kenchan

有難う御座いました。

2007/09/12 02:48:26
id:kunyami No.2

kunyami回答回数24ベストアンサー獲得回数42007/09/12 01:22:28ここでベストアンサー

ポイント60pt

ちょっと強引ですが

-----

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では動きました。

id:black_kenchan

ズバリこれでした!!

有難う御座います。

勉強になりました。

2007/09/12 02:48:30
id:huruyosi No.3

huruyosi回答回数30ベストアンサー獲得回数32007/09/12 01:44:19

ポイント10pt

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

例えば

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

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

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

id:black_kenchan

有難う御座いました。

2007/09/12 02:48:41
id:chuken_kenkou No.4

chuken_kenkou回答回数722ベストアンサー獲得回数542007/09/12 02:19:54

ポイント10pt

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
|< 
  • id:KUROX
    MySQL ってへんなSQLがかけるんですね。
  • id:chuken_kenkou
    >MySQL ってへんなSQLがかけるんですね

    「へんなSQL」とは、どの部分のことを言ってますか?
  • id:Yota
    http://dev.mysql.com/doc/refman/4.1/ja/union.html
    個別の結果をUNIONすればいいと思います。
  • id:mj99
    >個別の結果をUNIONすればいいと思います。
    UNIONの結果セットの並びは不定、、、
    だと思ったけど、こうすればいいのか

    (SELECT 1 AS XKEY, t.* FROM テーブル1 AS t WHERE フィールド1='5')
    UNION(SELECT 2 AS XKEY, t.* FROM テーブル1 AS t WHERE フィールド1='2')
    UNION(SELECT 3 AS XKEY, t.* FROM テーブル1 AS t WHERE フィールド1='4') ORDER BY XKEY

    ----
    コメント1の
    >MySQL ってへんなSQLがかけるんですね。
    がどれを指しているのか気になる。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません