電子書籍の厳選無料作品が豊富!

はじめまして、初心者でございます。
困っておりまして、友人にこのサイトを教えていただきました。

今、顧客の登録データを管理できるシステムを作っておりまして、登録したお客さんのデータを「ボタンを押したら県別に並び替えて取り出せるようにして」と言われました。
「ソート使えば簡単でしょ?」と言われましたが、検索しても何のことかわかりません。
教えていただけたら幸せすぎます。

データベース名はkanri(管理)
テーブル名はkokyaku(顧客)
カラム名は
ID (客ID)
name (名前)
sei (性別)
toshi (年齢)
add 住所(県のみ)
です。

select文を使って登録した順に表示させているのですが。
それをボタンで並び替えるといわれて「ん~~?」という状況です。

すいませんどなたかご教授ください。
質問が下手で伝わらなかったらすいません。
伝わらなかった部分があればすぐに追加させてもらいます。
よろしくお願いします。

A 回答 (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順が登録順とは
 限らなくなってしまいます。

ま、こういうのはやっているうちに判ってきますので。
お気楽にデータベースにチャレンジされるといいかと思います。
    • good
    • 0
この回答へのお礼

とてつもなく参考になりました。

ありがとうございます。
勉強になりました、こんなに早く返事くれるとは思っていませんでした。

なんて素敵なんだ。

さっそく実践してみます。

お礼日時:2007/06/25 01:37

こんちは


県名は文字列ですか?
文字列ならアスキーコード順等でしか並べ替える事は出来ません。
一般的には都道府県番号は総務省で統一されており、ほとんどのデータがそれに則っているはずです。アスキーコード順ではなく、北海道から沖縄までの都道府県コードで管理する方が良いと思います。
http://ja.wikipedia.org/wiki/%E5%85%A8%E5%9B%BD% …

例えばカラムを一つ増やして、
カラム名は
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
として検索すれば都道府県コード順に結果が表示されます。


参考まで。
    • good
    • 0

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全部でそれなりに癖が
ありますので。

では、いろいろ頑張ってみてください。
ありがとうございました。
    • good
    • 0
この回答へのお礼

なんたる博覧強記!!

すげぇ。

知らないことだらけでした。
私ももっと勉強します。
ありがとうございました^^

お礼日時:2007/06/25 07:23

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