- ベストアンサー
データを県別に並び替えて取り出す方法
- 顧客の登録データを管理するシステムで、ボタンを押すと県別にデータを並び替えて取り出す方法を教えてください。
- データベースのテーブルにはID、名前、性別、年齢、住所(県のみ)のカラムがあり、select文で登録順に表示しています。しかし、ボタンを使ってデータを並び替える方法がわかりません。
- 質問が下手かもしれませんが、データを県別に並び替えて取り出す方法を教えてください。お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
IT屋の者です。 んー、ごく単純にOrder byをつけたSQLを再発行し、リロードすれば いいんじゃないかなと思いますが(笑) 現在、SQLが登録順 …ん?登録日フィールドが見当たらないんですが。 ま、 SELECT ID,name,sei,toshi,add FROM kokyaku Order by 登録日 ですかね? そこを、 SELECT ID,name,sei,toshi,add FROM kokyaku Order by add にするとOKかと思います。 ちなみに、このデータベース構造にちょっと足りないところが あるようなので、指摘させていただきますと。 ・顧客テーブルは永続的で一旦登録すると当分変更がないマスター 情報となります。人の年齢は毎年変わりますので、生年月日 フィールドが要るような気がします。 ・年齢フィールドはSQL 発行時のリアル計算ですとちょっと SQL 構文が面倒なので別途生年月日からNowを比較し、年齢を 再計算するSQL を毎日1回自動発行してやるといいと思います。 ・住所をきっちり並べるのは住所とは別に「ふりがな」か、Order列 が必要です。無いと文字コード順に並びます。 ・登録日フィールド無しでのSQL文は順序が保障されません。 登録順ではなくHDDに書かれた順になります。 たとえば、大量に過去データを削除した後で新データを登録すると 過去領域のスキマにデータを書いちゃうので、Sort順が登録順とは 限らなくなってしまいます。 ま、こういうのはやっているうちに判ってきますので。 お気楽にデータベースにチャレンジされるといいかと思います。
その他の回答 (2)
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
こんちは 県名は文字列ですか? 文字列ならアスキーコード順等でしか並べ替える事は出来ません。 一般的には都道府県番号は総務省で統一されており、ほとんどのデータがそれに則っているはずです。アスキーコード順ではなく、北海道から沖縄までの都道府県コードで管理する方が良いと思います。 http://ja.wikipedia.org/wiki/%E5%85%A8%E5%9B%BD%E5%9C%B0%E6%96%B9%E5%85%AC%E5%85%B1%E5%9B%A3%E4%BD%93%E3%82%B3%E3%83%BC%E3%83%89 例えばカラムを一つ増やして、 カラム名は ID (客ID) name (名前) sei (性別) toshi (年齢) add 住所(県のみ) addcode 都道府県コード としておけば、ORDER BY addcode で検索すれば見慣れた順番で並ぶ筈です。 どうしてもテーブルをいじりたくない、というなら別に県名と都道府県コードのテーブル(CREATE TABLE addcodes { addcode INT, add varchar(10) ,primarykey (addcode) })を用意して SELECT kokyaku.* FROM kokyaku,addcodes WHERE kokyaku.add = addcodes.add AND ...絞込み検索式 ORDER BY addcodes.addcode として検索すれば都道府県コード順に結果が表示されます。 参考まで。
No.1です。 喜んで頂いて何よりです。 ま、いつか、逆に私が質問したら、答え教えてくださいね(笑) ちなみに、補足しますと。 注意点はもうちょっとだけあります。 ・SELECT文のフィールド名を「SELECT * FROM TABLE」のように 「*」で省略…しないほうがいいです。 省略するとデータベースの変更に弱くなるのと、処理が遅く なりがちになります。 ・ソート順の件ですが、ORDER BY句はSELECT系で必須と考えて ください。無いと面白い順番で返ってくるときがあります。 ・RDBMS(データベースのソフト)の種類によっては、 name、addは関数名と近いので「[]」で囲むほうが安全です。 またキッチリと組み上げていくならば、こういう名前を使わずに ID,FullName,Sex,Age,Addressというような英語を使ったほうが 他人に見せやすいかと思います。 ・絞り込みのWhere句は絞れる順に書くと速くなる傾向があります。 例えば、Where 住所='大阪' AND 名前='山口'と書くよりも Where 名前='山口' AND 住所='大阪'と書くほうが速いです。 なぜなら先に小さくデータを絞りこむとメモリを使わないからです。 あとはお使いのデータベースソフトにより異なります。 ま、Postgres、MySQL、Oracle、SQL Server全部でそれなりに癖が ありますので。 では、いろいろ頑張ってみてください。 ありがとうございました。
お礼
なんたる博覧強記!! すげぇ。 知らないことだらけでした。 私ももっと勉強します。 ありがとうございました^^
お礼
とてつもなく参考になりました。 ありがとうございます。 勉強になりました、こんなに早く返事くれるとは思っていませんでした。 なんて素敵なんだ。 さっそく実践してみます。