mysql:14540
From: chuuken kenkou <chuuken kenkou <ken_ken_1962@xxxxxxxxxx>>
Date: Thu, 15 May 2008 20:03:13 +0900
Subject: [mysql 14540] Re: PHPの usort() のようなことをしたい
> ここで、 cat_1st をキーとしてソートしたいのですが、 > 単純に ASC や DESC でソートするのではなく、 > 特定の順番で並べたいと考えています。 > > 例: 'P' → 'A' → 'N' → 'C' → ... → 'NO' > > このようなソートを、MySQLだけで実現できるのでしょうか? > > 上記のように並べたいのは、 cat_1st のそれぞれの値の重要性や、 > 使用頻度などによるものです。 > ただ、このソートは必須ではなく、「あまり手をかけずにできれば」という程度なので、 > このためにカラムを1つ(重要性などを表す数値など)増やす、 > などは考えておりません。 「特定の順番」をRDBMS側に指示する必要がある訳ですから、検索SQL中でCASE式などで与えるか、事前に順序を保持した表や列を作っておく必要があります。 「順序を示す列を持つ」ということが、「手を掛ける」という程のことなのかは考え方次第ですが、基の表をいじりたくないということなら、別の表にして保持してはどうでしょうか? -- 順序保持の表 create table sortseq (cat_1st varchar(10), seq int) CHARSET=latin1; -- 順序を設定 insert into sortseq values('F',1); insert into sortseq values('A',2); insert into sortseq values('N',3); insert into sortseq values('C',4); insert into sortseq values('NO',999); -- 検索 select e.* from example as e inner join sortseq as s on e.cat_1st=s.cat_1st order by seq ; データ件数が数千件以上といった数なら、cat_1st列、seq列に適切なインデクスを定義すれば、ジョイン及びソートによるオーバーヘッドも抑止できると思います。 _________________________________________________________________ Live Search 地図検索で東京の都心部が3D表示に!ドコをみてみる? http://maps.live.com/
14538 2008-05-15 19:16 ["Akikazu Takenaka" <] PHPの usort() のようなことをしたい 14539 2008-05-15 19:40 ┣[HIRATSUKA Sadao <hir] -> 14540 2008-05-15 20:03 ┣[chuuken kenkou <ken_] 14542 2008-05-15 23:18 ┗["F.Y" <fumi_sby@xxxx] 14547 2008-05-16 10:46 ┗["Akikazu Takenaka" <]