• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:登録したデータを県別に並び替えて取り出したい)

データを県別に並び替えて取り出す方法

このQ&Aのポイント
  • 顧客の登録データを管理するシステムで、ボタンを押すと県別にデータを並び替えて取り出す方法を教えてください。
  • データベースのテーブルにはID、名前、性別、年齢、住所(県のみ)のカラムがあり、select文で登録順に表示しています。しかし、ボタンを使ってデータを並び替える方法がわかりません。
  • 質問が下手かもしれませんが、データを県別に並び替えて取り出す方法を教えてください。お願いします。

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

  • ベストアンサー
noname#245936
noname#245936
回答No.1

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順が登録順とは  限らなくなってしまいます。 ま、こういうのはやっているうちに判ってきますので。 お気楽にデータベースにチャレンジされるといいかと思います。

D-jokers
質問者

お礼

とてつもなく参考になりました。 ありがとうございます。 勉強になりました、こんなに早く返事くれるとは思っていませんでした。 なんて素敵なんだ。 さっそく実践してみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

こんちは 県名は文字列ですか? 文字列ならアスキーコード順等でしか並べ替える事は出来ません。 一般的には都道府県番号は総務省で統一されており、ほとんどのデータがそれに則っているはずです。アスキーコード順ではなく、北海道から沖縄までの都道府県コードで管理する方が良いと思います。 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 として検索すれば都道府県コード順に結果が表示されます。 参考まで。

全文を見る
すると、全ての回答が全文表示されます。
noname#245936
noname#245936
回答No.2

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全部でそれなりに癖が ありますので。 では、いろいろ頑張ってみてください。 ありがとうございました。

D-jokers
質問者

お礼

なんたる博覧強記!! すげぇ。 知らないことだらけでした。 私ももっと勉強します。 ありがとうございました^^

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Access2010、別画面への移動方法について

    ネットアプリのお客様管理データベースを、Windows7、Access2010を使って、作成しています。 画面にアプリをご利用いただいているお客様を、一覧で表示しているフォーム画面があります。ボタンを設置して、この画面からお客様情報詳細画面など、各画面へ行く方法を探しています。 (一例) 顧客ID お客様名 電話番号 1    あいう  03-1234-5678 2    かきく  03-1597-4563 現状のやり方です。コンボボックスでお客様名を全て出し、「お客様の詳細データを表示する」ボタンをクリックします。 ボタンには、あるクエリをフォーム化したページへ、ジャンプするマクロが埋め込んであります。 ボタンを押すと、フォームの元となっているクエリが発動。 このクエリは、抽出条件にコンボボックスを参照していて、選択したお客様名を読み込み、選んだお客様のデータのみが抽出されます。 その結果、コンボボックスでクリックした顧客の詳細データが表示された画面へ行く仕組みになっています。 この方法だと、お客様が例えば300名になると、コンボボックスで選びきれなくなります。 お客様一覧が画面上で出ているのに、わざわざコンボボックスから選択しないで済むやり方を探しています。 お客様名をクリックしてボタンを押す方式か、 各レコード横にボタンがあり、それを押すだけでジャンプする方式が理想です。 作ったものを他の人に見てもらったのですが、使いにくいインターフェイスという評価でした。やはり、表示されている全てのレコードの横にボタンが設置される。もちろん、データが登録されたり、削除されたりすれば、ボタンの数も連動します。ボタンをクリックすると、それぞれの画面へ行く方式がベストです。 (イメージ) 顧客ID お客様名 電話番号 1    あいう  03-1234-5678  「編集」ボタン 「削除」ボタン 「お客様データ詳細表示」ボタン 2    かきく  03-1597-4563  「編集」ボタン 「削除」ボタン 「お客様データ詳細表示」ボタン VBAを使わないで済むと助かります。 長文で申し訳ありませんが、宜しくお願いします。

  • 重複データより一番古いデータのみを条件付きで抽出

    カルテテーブルに登録されたデータから、 日時が2007-02-28以前で、 顧客ごとに一番古い(最初の)データのみを抽出し、 ショップ番号が1である顧客のみを、 絞り込みたいのですが、 教えてもらえますでしょうか?。 ※顧客の一番古いデータがショップ1以外であれば省きたい。 ※また、日付の期間中の抽出顧客ごとのカルテ数も知りたい。 (2回目以降は別の店舗とスタッフでもカウントする) MySQL 4.0.24-standardを使用しています。 カルテテーブル(chart_table) --------------------------------------- kokyaku | shop | staff | date | 1 1 1 2006-06-27 1 1 5 2006-12-11 2 1 2 2007-01-27 2 2 3 2007-02-07 3 3 4 2007-02-04 1 1 2 2007-03-12 結果1 --------------------------------------- kokyaku | shop | staff | date | 1 1 1 2006-06-27 2 1 2 2007-01-27 結果2 --------------------------------------- kokyaku | cnt | 1 2 2 2 何卒、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • アクセスに関して、データの重複を確認したい

    ご覧いただき、ありがとうございます。 現在、アクセスの勉強中なのですが、 どうしてもわからない点がありましたので、ご質問させていただきます。 現在、アクセスを使用し、ある顧客情報の管理を行っております。 顧客情報の登録をする際には、名寄せを行い(名前と郵便番号) 重複をさせないようしております。 この顧客情報は、管理するお客様の方でも修正することができるのですが、 最近、お客様の方で修正をしてしまい、 名前と郵便番号が一緒のデータが発見されました。 他にもそういったデータがあるのではと探し始めたのですが、 アクセス初心者のため、足踏みしております。 イメージとしては、 ID  顧客名  郵便番号  電話番号 12  山田太郎  1111111  0120222222 こういったテーブルになっております。 情報が少なく、申し訳ございませんが、 ご回答いただけますと幸いです。 宜しくお願い致します。

  • DBに入力されている値のセレクトフォームを受け取りたいです

    こんにちは。 たびたびすみません・・・・。 MySQLのテーブルの顧客名をセレクトメニューで 表示できて大喜びしていたのですが・・・。 【登録】→【確認】→【MySQLの該当テーブルに保存】 としたいのです。 テキストエリアで入力した項目は、【確認】画面で <?php echo htmlspecialchars($_POST["siire_no"]) ?> と入力すると、ちゃんと表示されるのですが・・・。 先日教えて頂いた、テーブルからセレクトメニューを作る コードを使わせて頂いて $res=mysql_query("select * from kokyaku"); while ( $rows=mysql_fetch_array($res) ) {   print "<option value=\"".$rows['kokyaku_id']."\">".$rows['kokyaku_name']."\n"; } と書いて、【確認】画面で <?php echo htmlspecialchars($_POST["kokyaku_id"]) ?> とすると、顧客テーブルで指定していた、顧客の番号が 表示されます。 これを、siireテーブルに保存するときの顧客情報 フィールドには、顧客番号で入れたいけれども、 【登録確認】画面では、番号ではなく、顧客名を 表示させたい場合は、どのように記述すれば よいのでしょうか・・・・。 ためしに、 <?php echo htmlspecialchars($_POST["kokyaku_name"]) ?> と書いてみたりしたのですが 【確認】画面で、顧客の欄だけ何も出なくなったり してしまいました。 どうかご指導よろしくお願いいたします。 使用環境:PHP5+MySQL4+Apache

    • ベストアンサー
    • PHP
  • エクセルで少し凝った顧客データを作りたいのですが・・・。

    OSはWindowsNT、エクセルはExcel97を使用しています。 現在、使用している顧客管理のデータ(「顧客の達人Ver4.0」)がイマイチ使いづらいため、エクセルで似たような顧客管理データを作れないものかと思いました。そこでお聞きしたいのが、データを入力するとき、あらかじめ作っておいたひな形にデータを入力すると、リスト画面に蓄積されていく事が出来るかどうか?ということです。説明が下手ですみません。つまりこの方法は、顧客の達人の入力の仕方と同じです。普通、エクセルで顧客データを入力する時、お客様毎に次の行、次の行というように入力していきますが、そうではなく、ひな形に入力し、保存ボタンを押す事で入力したデータがリストに順々に保存されていくという形にしたいのです。こういった事はエクセルで可能でしょうか?つたない説明ですみません。補足致しますので宜しくお願いします。

  • PHP POSTでデータ登録について

    PHP初心者です。PHP簡単な管理システムを作っていますが、データベースにデータ登録がうまくできないので、教えてください。 データ登録が出来ますが、登録ページの中に <a href ="xxx.php">に追加して、リンクをクリックしたら、空データがそのまま登録されてしまった。 フォーム中のボタンを押さないとデータ登録ができない設定するのを作りたいですが、ソースコードのどこで修正したら、ページリンクしても自動的に空データ登録できないのか? <form id="frmIpunt" name="frmIput" method="post" action=""> <table width="600" border="0" cellspacing="0" cellpadding="0"> <tr> <th colspan="2">新規店舗登録</th> </tr> <tr> <td>店舗名</td> <td> <span id="sprytextfield1"> <label for="shops_name"></label> <input name="shops_name" type="text" id="shops_name" size="10"> <span class="textfieldRequiredMsg">未入力</span></span> </td> </tr> <tr> <td>住所</td> <td><input name="shops_address" type="text" id="shops_address"></td> </tr> <tr> <td>電話番号</td> <td><input name="shops_tel" type="text" id="shops_tel"></td> </tr> </table> <input type="submit" class="order-button" value="登録する"> </form>

    • ベストアンサー
    • PHP
  • エクセルでシートの文字データを別ブックに反映・・・

    エクセルを使って顧客データを作っています。 伝票データ(BOOK1)に ・婚約指輪のお客様データ(SHEET1) ・結婚指輪のお客様データ(SHEET2) があり、それぞれこんな感じ↓のデータが並んでいます。  店舗  伝票NO  お客様名  売上合計  品番・・・ -------------------------------------------------  A店   1-2-2   東京一郎  ¥120000  SDD223  B店   3-5-5   神戸次郎  ¥953330  LP002-30 このデータを、顧客データ(BOOK2)として自動的に反映される様にしたいです。 (1)反映したい列を選びたい。 (2)同じ名前の項目(例:店舗、お客様名など)はまとめたい。 婚約指輪のお客様(Book1sheet1)と結婚指輪のお客様(Book1sheet2)、両方の名前の名前をBook2の「お客様名」列に反映させたい。 上記の作業を出来るだけ簡単に組みたいです。 エクセルは初級者なのでマクロなど難しい事は分かりません。。。 でも、今日中になんとかしたいです! よろしくお願いします!!!

  • データ登録・更新時の並びについて

    ちょっと疑問に思ったので、ご存知の方がいらっしゃればご教授下さい。 以下のようなデータを登録します。 id  名前 1  あいう 2  かきく 3  さしす 登録後に閲覧すると、上記の並びでちゃんと表示されるのですが、 続いて、id=2の「かきく」を修正・登録してから閲覧すると id  名前 1  あいう 3  さしす 2  かきく という風に並んで表示されます。PostgreSQLでは何をキーにして並びを 決めているのでしょうか? また、それは設定を変更することによって 変えることは可能でしょうか? やりたい事は、修正などをしても一番最初に登録した並びを保持したい のです。 プログラム側でidをキーにしてソートすれば済む話なのですが、PostgreSQL 側でできることは、できるだけPostgreSQL側で処理させた方が良いと思った ので、質問させて頂きました。 どうぞ、よろしくお願い致します。

  • 重複データのチェック方法がわかりません。

    はじめまして。エクセル・アクセス関係を最近さわりはじめました。 下記について重複しているデータをチェックしたいのですが、いろんなサイトをみても「これ!」というのが見当たらず困っています。どのような式を作成すればよいのか、ご教授ください。 ちなみに今はMATCH関数を使いながら、データを並び替え・・とすごく面倒なことをしています。 顧客ID     請求番号       登録日 1111       0001         2010/01/01   1112       0001         2011/11/11   1113        0002         2010/02/01   1113       0003     2011/01/01   1114       0004     2011/01/01   1114       0005     null         上記の顧客データあるとします。 顧客IDや請求IDが重複しているものがあるため、これらを最終的には下記(<最終形態>)のようにしたいのですが、その前に横の列にチェック(<チェック>)をいれたいです。 <最終形態> 顧客ID     請求番号       登録日 チェック 1112       0001         2011/11/11    残し 1113      0003     2011/01/01       残し 1114      0004     2011/01/01       確認 1114      0005     null            確認 <チェック> 顧客ID     請求番号       登録日       チェック 1111       0001         2010/01/01     削除   1112       0001         2011/11/11     残し 1113       0002         2010/02/01     削除 1113      0003     2011/01/01        残し 1114      0004     2011/01/01        確認 1114      0005      null              確認 (1)請求番号が同じで顧客IDが異なり、登録日も違う場合は、登録日が新しいほうに「残し」、古いほうに「削除」を入れる (2)顧客IDが同じで請求番号が異なり、登録日も違う場合は、登録日が新しいほうに「残し」、古いほうに「削除」を入れる (3)顧客IDが同じで請求番号が異なる、あるいは請求番号が同じで顧客IDが異なり、登録日がnull(どちらか一方でも)の場合は、「確認」を入れる→登録日がともに同じ日付でも「確認」を入れる ※ちなみに、実際の重複するデータは上記のように連続して入っていません。 順序はばらばらです※ エクセルでもアクセスでもかまいませんが、やりやすいほうでご教授いただけると幸いです。 よろしくお願いします。 SQLはよくわかっていません。。 最初から教えていただけると幸いです。

  • 非連結のtxtBoxのデータをcmdボタンで検索

    非連結のtxtBoxのデータをcmdボタンで検索 いつもお世話になります。<m(__)m> 「T顧客管理」を基に「F顧客管理入力」を作成し「F顧客管理入力」 には非連結の「txtBox」と「cmd検索」があります。 「T顧客管理」に追加クエリにて「商品管理_ID・管理番号・商品名」 が入力済みになっております。 そこで「txtBox」に管理番号を入力して「cmd検索」を押して検索 されたレコードに顧客のデータを入力したいのですが、レコードが 検索されません。 「cmd検索」のイベントに Private Sub cmd検索_Click() DoCmd.SearchForRecord , , acFirst, "管理番号 Like '*" & Me!txt検索 & "*'" Me!txt検索 = Null End Sub としています。 追加クエリは INSERT INTO T顧客管理 ( 商品管理_ID, 管理番号, 商品名 ) SELECT T商品説明.商品管理_ID, T商品説明.管理番号, T商品説明.商品名 FROM T商品説明 WHERE (((T商品説明.商品名) Is Not Null)); として「T商品説明」には、他にフィールドがいくつかあります。 --「T顧客管理」-- 商品管理_ID ---- 数値型(主キー) 管理番号 ------- テキスト型 商品名 --------- テキスト型 販売日時 ------- 日付/時刻型 販売価格 ------- 通貨型 お名前 --------- テキスト型  ・  ・  ・ ----------------- コード等間違いがありますでしょうか? 初歩的な事と思いますが宜しくお願い致します。<m(__)m>