重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

mysqlのデータの表示順番を変えたいのですが、
思うようにいかず悩んでいます。

例えば、顧客データで 東京在住で入会年月日順の出力をして、
その後に、名古屋在住でID順に出力させたいとします。


下記のように書けば、nagoyaのほうがid順になりません。
考え方が違うのでしょうか?

よろしくお願いします。

SELECT ~ FROM ~ WHERE ~ ORDER BY tokyo,nyukai ASC,nagoya,id ASC,

A 回答 (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でソートされません。
    • good
    • 0
この回答へのお礼

ご丁寧に教えていただき有難うございました。

いいヒントになり、完成しました。

お礼日時:2013/08/16 01:13

#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
;
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/08/17 06:10

まず、テーブル構造の確認。


列「在住」があって、値「東京」と「名古屋」を持ってる?
それとも列「東京在住」と列「名古屋在住」があるのですか?
> 下記のように書けば
からすると、後者っぽいですね。

だとすると列「東京在住」・「名古屋在住」の値は何でしょう?

列「東京在住」に該当するレコードだけ拾うWhere条件付け、値「1」を返す列を設け、名前を付けるSelect文を作る。
同様に列「名古屋在住」を拾い、値「2」を返す列を東京と同じ列名で設け、unionでつなぐ。
ORDER BYを、新たに設けた列名、IDとするとか。

列「在住」が値「東京」と「名古屋」を持つ場合でも、同じように「東京」なら値1を
「名古屋」なら値2を返すようにしておいて
ORDER BYを、在住、IDとするとか。(UNION不要)

この回答への補足

説明不足で大変申し訳ございません。


東京在住で入会年月日順に昇順で出力をして、

続けて、名古屋在住で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

補足日時:2013/08/12 19:09
    • good
    • 0

> ORDER BY tokyo,nyukai ASC,nagoya,id ASC,



tokyoというカラムとnagoyaというカラムがあるということでしょうか?
東京在住の上、名古屋に在住というわけのわからない状態ですが・・・
仮にその運用が正しいとすれば、東京、入会、名古屋の全てが同じデータ同士で
あればidでソートされると思います

たとえばaddressというカラムをつくってそこにtokyoやnagoyaという
データを保持してみては?
    • good
    • 0

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

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