• ベストアンサー

mysqlのデータの表示順番を変えたい

mysqlのデータの表示順番を変えたいのですが、 思うようにいかず悩んでいます。 例えば、顧客データで 東京在住で入会年月日順の出力をして、 その後に、名古屋在住でID順に出力させたいとします。 下記のように書けば、nagoyaのほうがid順になりません。 考え方が違うのでしょうか? よろしくお願いします。 SELECT ~ FROM ~ WHERE ~ ORDER BY tokyo,nyukai ASC,nagoya,id ASC,

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

こういうこと? //元データ create table hoge(address int,nyukai date,id int); insert into hoge values(1,'2013-01-01',201),(1,'2013-01-02',204),(1,'2013-01-03',202),(1,'2011-01-04',203), (2,'2013-02-04',101),(2,'2013-02-02',102),(2,'2013-02-01',103),(2,'2011-02-03',104), (3,'2013-03-01',301),(3,'2013-03-02',302); //表示 SELECT address,nyukai,id FROM hoge WHERE address in(1,2) ORDER BY case address when 1 then 1 when 2 then 2 else 3 end ASC, case address when 1 then nyukai when 2 then id end ASC もとの処理だとnagoyaだろうがnyukaiで一度ソートがかかるためidでソートされません。

ajhc8801
質問者

お礼

ご丁寧に教えていただき有難うございました。 いいヒントになり、完成しました。

その他の回答 (3)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

#2です。可能です。 SORT用のキーをでっち上げましょう。 変数の型によっては、「入会年月日」と「ID」を「桁揃えした文字列に」編集してください。 SELECT ~ CASE address WHEN '1' THEN 入会年月日 WHEN '2' THEN ID ELSE 'more' END as SortKey FROM ~ WHERE ~ ORDER BY address ASC, SoryKey ASC ;

ajhc8801
質問者

お礼

解決しました。有難うございました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

まず、テーブル構造の確認。 列「在住」があって、値「東京」と「名古屋」を持ってる? それとも列「東京在住」と列「名古屋在住」があるのですか? > 下記のように書けば からすると、後者っぽいですね。 だとすると列「東京在住」・「名古屋在住」の値は何でしょう? 列「東京在住」に該当するレコードだけ拾うWhere条件付け、値「1」を返す列を設け、名前を付けるSelect文を作る。 同様に列「名古屋在住」を拾い、値「2」を返す列を東京と同じ列名で設け、unionでつなぐ。 ORDER BYを、新たに設けた列名、IDとするとか。 列「在住」が値「東京」と「名古屋」を持つ場合でも、同じように「東京」なら値1を 「名古屋」なら値2を返すようにしておいて ORDER BYを、在住、IDとするとか。(UNION不要)

ajhc8801
質問者

補足

説明不足で大変申し訳ございません。 東京在住で入会年月日順に昇順で出力をして、 続けて、名古屋在住でIDを基準に昇順で出力したいと思っています。 実際は addressというカラムがあり、データーベースには、 東京は1、名古屋は2という値で入っています。 下記のような感じですが、 (1)は昇順で出力しましたが、(2)はidで昇順で出力されません。 SELECT ~ FROM ~ WHERE ~ ORDER BY address='1',nyukai ASC,address='2',id ASC, どうしても、同時に出力をしたいのですが、無理なのでしょうか? よろしくお願いいたします。 (1) address nyukai ---------------------- 東京 2013/01/01 東京 2013/01/02 東京 2013/01/03 東京 2011/01/04 (2) address id ---------------------- 名古屋   101 名古屋 102 名古屋 103 名古屋 104

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

> ORDER BY tokyo,nyukai ASC,nagoya,id ASC, tokyoというカラムとnagoyaというカラムがあるということでしょうか? 東京在住の上、名古屋に在住というわけのわからない状態ですが・・・ 仮にその運用が正しいとすれば、東京、入会、名古屋の全てが同じデータ同士で あればidでソートされると思います たとえばaddressというカラムをつくってそこにtokyoやnagoyaという データを保持してみては?

関連するQ&A