データベースの作成方法と記録管理テーブルの設計

このQ&Aのポイント
  • データベースの作成方法や記録管理テーブルの設計について質問があります。
  • サークルメンバーのマラソン大会の記録管理テーブルを作成するための方法を知りたいです。
  • phpMyAdminを使用して一人の会員に対して複数の日付と記録を登録する方法について教えてください。
回答を見る
  • ベストアンサー

データベースの作成

こんにちは。データベースの作成に関する質問です。 サークルメンバーのマラソン大会の記録管理テーブルを作ろうと考えています。 フィールドとしては、 1.会員番号、2.名前 3.日付 4.フルマラソン 5.ハーフマラソン の5つを考えています。 ここで、一人の会員に対して、例えば3の日付で2005年にフルマラソンを二回走った場合、 日付  フルマラソンの記録 2005     3:30:42 2005    3:15:27 という形にしたいのですが、phpMyAdminを使っているのですが、これだと一人の会員に対して、ひとつの日付とそれに対応するひとつの記録しか登録することができません。僕自身が方法を知らないだけだと思うのですが・・・ 例えば以下のような感じです。 1 ケン 2005 3:12:24 1:20:32  これを 1 ケン 2005 3:12:24 1:20:32 2005 3:05:11 1:19:24 2004 3:32:13 1:24:56 といった形で作るにはどうすればよいのでしょうか? 日付と記録の部分を分けてテーブルを作った方が良いのでしょうか? よろしくお願いします

  • MySQL
  • 回答数6
  • ありがとう数3

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

  • ベストアンサー
回答No.5

そうですね、select文とjoinの基本的な構文を調べて下さい。select文の中でselectが2回現れる事は絶対にありません。 それと記録テーブルの構造を少し考えた方がいいですね。full,half,10kmってどれもタイムですよね?そして人により存在しないデータもある訳ですよね?でしたら、僕が回答で示したように、マラソンの種類を定義して、タイムのフィールドを3つも並べない方が良いですよ。もしこの形式で行うのであれば、データが無い状態を明確に決めておかなければなりません。そうしないと「タイムが存在する/しない」を得る事が難しくなります。 仮にタイムが無い状態をタイム0とします。 select a.number,a.name,b.date,b.full from member as a,kiroku as b where b.date = '2005' and b.full > 0 and a.number = b.number 取得するレコードは恐らく一つなのでorder句は不要ですね。

kenkenkenken25
質問者

補足

ご回答ありがとうございます。wakame0729さんのおっしゃるようにテーブルの構造があまりよくないかもしれませんが、今回はそれでやってみようと思います。 membersテーブル(主キー:number)  number  name 1     A 2     B kirokuテーブル (主キー:number,date) number  date     full   half  10km 1    2005-5-22   2:55:21 1    2004-3-11        1:19:15 ここから、Aの2005年フルの記録を抜き出すという場合、教えていただいた方法でsqlを書いたのですが・・・ $sql = "select members.number,members.name kiroku.date,kiroku.$distance from members,kiroku where (members.name = $name) and (kiroku.date like '%$date%') and (members.number = kiroku.number)"; これだと同様にだめでした。オプションメニューで選択する際、会員番号の選択もするようにしないとだめなのでしょうか?

その他の回答 (5)

回答No.6

あ、いけない、会員番号1番、の指定を入れるの忘れてました。先の回答のSQLだと「フルマラソンのタイムが存在するメンバー」が一覧表示されるので、適宜orderでソートして下さい。

回答No.4

left joinの行でテーブル指定が抜けました(^^; フルマラソンの記録がある会員のリストを得るには select 取得するフィールドリスト from 会員テーブル as a left join 記録テーブル as b on a.会員ID = b.会員ID where b.種類 = フルマラソン and b.会員ID is not null;

kenkenkenken25
質問者

補足

早速、sql文を作ってみたのですが、うまくいきませんでした。二つのテーブル(membersにはnumber(会員番号)name(名前)が入っていて、kirokuにはnumber(会員番号)、date(年度)、full(フルマラソンの記録) half(ハーフマラソンの記録)、10km(10kmの記録)が入っています) membersからは名前をkirokuからは年度別の記録を抜き出したいと考えています。 例えば、会員番号1番、Aさんの2005年のフルマラソンの記録を抽出するといった感じです。 それぞれオプションメニューで名前、年度、距離を選択することで結果が出力されるといったことを考えています。 sql文は以下のとおり作成したのですが、これだとだめでした。select をand でつなげるのはよくないのでしょうか? $sql = "select number,name from members and select date,$distance from kiroku where (kiroku.date like '%date%') and (members.number = kiroku.number) order by $distance"; よろしくお願いします。

回答No.3

連携といってもどのような事を求めているのかわかりませんが、select文でjoinを使うと複数テーブルを連携させてデータを取得する事ができます。例えば、フルマラソンのタイムが3時間未満の人を表示するには select 取得するフィールドリスト from 会員テーブル as a,タイムテーブル as b where b.種類 = フルマラソン and b.タイム < '3:00:00' and a.会員ID = b.会員ID; フルマラソンの記録がある会員のリストを得るには select 取得するフィールドリスト from 会員テーブル as a left join on a.会員ID = b.会員ID where b.種類 = フルマラソン and b.会員ID is not null; てな感じです。色々なバリエーションがあるので研究してみて下さい。

参考URL:
http://dev.mysql.com/doc/mysql/ja/join.html
kenkenkenken25
質問者

お礼

ご丁寧なご説明ありがとうございます! 今から早速やってみますね!

回答No.2

主キーはユニーク値でないと許されないのではなかったですか?この場合ですと会員番号、年度、種類の3つを主キーにしないといけないのでは?そして主キーで使う事を考えると、年度、種類は数値型にした方が良いと思いますよ。

kenkenkenken25
質問者

補足

そうでした!会員番号だけを主キーにするだけではだめでした。例えば会員番号を主キーにした場合、別のテーブル(会員番号、名前、性別、年齢というフィールドがあります)でも同じように会員番号を主キーにして、二つのテーブルの連携をとることは可能なのでしょうか?

回答No.1

そのようなケースではテーブルを別けた方がいいですね。こういうケースは非常によくありますよ。 会員番号あたりをキーにして、マラソンの種類も数値で定義して 会員番号,種類,記録 こんなテーブルを作ってあげれば良いと思います。

kenkenkenken25
質問者

補足

ご回答ありがとうございます! テーブルを分けて作成していきます! ところで、phpMyAdminだと新しくテーブルを作る際に1つのフィールドにはひとつの数値しか入力できないのですが・・・ その場合は主キーである会員番号を何度もつけて以下のようにやればよいのでしょうか? 会員番号  年度  マラソンの種類 記録 1     2005    フル     2:55:47 1     2005    フル     3:05:21 1     2004    ハーフ    1:26:19 2     2005    10km     47:12 2     2003    フル     4:32:21 という風なテーブルの作成の仕方でよいでしょうか? よろしくお願いします。

関連するQ&A

  • 数種類のテーブルを結合させて呼び出し

    こんにちは。 サークルメンバーのマラソンのタイムを管理するデータベースを作っています。 現在作っているテーブルは、 memberinfo(会員番号(number)、名前(name)) full(会員番号(number)、日付(date)、タイム(time)) 10km(会員番号(number)、日付(date)、タイム(time)) です。 これら3つのテーブルからメンバー全員のすべての距離の記録を抽出するsql文を作っています。 例えば、会員番号1のAさんが2005年にフルマラソンの記録が2:55:47で2004年に10キロの記録が34:53、会員番号2のBさんが2003年にハーフマラソンの記録が1:20:12で2003年に10キロの記録が40:21だとすると 結果が 1 A 2005 full 2:55:47 1 A 2004 10km 34:53 2 B 2003 half 1:20:12 2 B 2003 10km 40:21 という結果が出力されるというものです。 sql文は以下のとおりです。 $sql = "select memberinfo.number, name, date, time from memberinfo, full, half, 10km where (memberinfo.number = full.number = half.number = 10km.number)"; これだとsql文が間違っているようです。 どうすればよいでしょうか? よろしくお願いします

  • オプションメニューでデータの呼び出し

    memberというデータベースを作りました。member内は会員番号(number)、名前(name)、フルマラソン(full)、ハーフマラソン(half)、10km(10km)というフィールドがあります。 オプションメニューのページをhtmlで作り、そのオプションでフルマラソン、ハーフマラソン、10kmのいずれかを選択することで、会員番号、名前、選択した距離を表示できるようなものを作りたいのですが、選択したオプションに関するデータを抽出させる方法がわかりません。 考えているのはオプションで例えば「フルマラソン」を選択した場合、 select number,name,full from memberという命令を実行させるというものなのですが・・・ よろしくお願いします。

  • phpMyAdmin/テーブル作成エラーの対象方法について

    ■質問   phpMyAdminを使ってあるデータベースファイルにテーブルを作成する場面で、フィールド名とデータ型をフォーム形式で入力するところがあります。この二つの項目を入力してから、保存を押すのですが、「数値ではありません!」と叱られてしまいます。どこがいけないか教えてください。 ■環境  ・phpMyAdmin 2.11.9.2  ・DB開発初心者

  • 彼女と趣味

    25歳の男性です。付き合って半年の彼女がいます。 彼女と私の趣味についてどう合わせるか考えています。 私の趣味:マラソン(ロード、山岳)、ジム、サイクリング 彼女の趣味:テニス、音楽鑑賞 彼女の趣味については、私は中学生の時にテニスをしていたので 合わせることはできます。 私の趣味のジムは彼女は運動が好きなので一緒に行くことはできますが、 マラソンはやったことがないそうです。 私はマラソン歴5年でフルマラソンは3時間半を切るくらいです。 彼女は私と一緒にジョギングをしたい、慣れたらマラソン大会にも出たいと 言ってくれています。それは嬉しいのですが、カップルでマラソン大会に 出たことのある方に聞きたいです。 ・やはり相手のペースに合わせて記録は狙わないで走りますか? それともお互い携帯を携行して自分のペースで走りますか? 男のマラソン仲間はいますが、一緒にエントリーしても走るのは 自分のペースでガチンコでやっています。 最初のうちは彼女の体調の変化も考えて併走した方が彼女も嬉しい ですよね? あと、ハーフマラソンから始めるか、いきなりフルマラソンでいくかも 考えています。 どちらにしても、マラソンには相当の準備が必要なので、半年は一緒に 走り込んで怪我のないようにします。

  • 関西のマラソンスケジュール

    こんにちは。 関西在住の者ですが、 近々、フルマラソンかハーフマラソンを走りたいと考えています。 これから応募可能な、関西のマラソン大会をご存知の方、 教えて頂いてもよろしいでしょうか? また、2009年の関西のマラソンスケジュールが 一目見て分かる サイトがあれば教えていただけますと、 幸いです。 何卒よろしくお願い致します。

  • Delphiで扱うデータベース上の日付について

    Delphiで扱うデータベース上の日付について  質問させていただきます。何かしらのマナー違反等ありましたらご指摘願います。  TDataBaseでデータベースにアクセスし、TQuery、TDatasourceでTDBEditにデータを表示させています。接続するテーブルには日付型のフィールドがありそれをTDBEditに表示させて、編集したのち更新する、もしくは行を挿入してから更新する場合、入力した値が正しく日付であるかどうかはどのようにチェックすればよろしいのでしょうか。  フィールドにはMaskEditプロパティで2010/06/07とTDBEditに表示するよう設定してあります。  文字列として保存したものをTDBEditに表示する際日付に変換して表示することも考えたのですが、データベース上で日付による絞り込みや並べ替えをするため、そちらは断念しました。  まとまりのない文章で申し訳ありませんが、お教えいただければ幸いです。よろしくお願いします。

  • マラソンに有効なサプリを教えて

    マラソンに有効なサプリを教えてください。 短期間で効率的に速く走れるようになりたいです。 男友達の東京マラソンサブ3、女友達のサブ4.5に触発され、2か月後のハーフマラソンを申込みました。 フルマラソンの大会も探しています。 ハーフマラソンの目標は1時間45分。 フルマラソンの目標はサブ4(4時間以内に完走)です。 3年前のハーフマラソンの記録は1時間50分でした。 その後ブランクがあり現在に至ります。 トレーニングは週に5日できます。 平日は1時間、休日は2~3時間充てられます。 「トレーニング方法」「距離を走る(月何キロ等)こと」「バランスの良い食事が肝心」なのはわかっています。 多少の筋肉痛は覚悟の上です。 少しでも早く速くなれる効率的なサプリを教えてください。 アミノ酸? BCAA? L-グルタミン? シトルリン? アルギニン? プロテイン? 訳がわかりません・・・

  • 近畿で初心者向けのマラソン大会は

    フルマラソン初参加の初心者です。先日の大阪マラソンの抽選は落ちてしまいました。 大阪マラソン以外に、近畿で初心者向けのマラソン大会を教えてください。極力平坦で、記録が出やすいコースが知りたいです。よろしくお願いいたします。

  • フルマラソンを走り切る(時間内に)ためにすることは何ですか?

    フルマラソンを走り切る(時間内に)ためにすることは何ですか? 東京マラソンやホノルルマラソンなど比較的制限時間の長い マラソンに出場したいと考えてはいますが、ロングの距離は 今までに走ったことがなく、いきなり申し込むのは無謀かと 考えています。 やはり10km、ハーフ、そして30kmと徐々に距離を伸ばして 実績を作っていくという方法がいいいのでしょうか? 今までは10kmくらいの市民大会くらいしか参加経験ありません。 フルマラソンまでの準備期間はやはり1年間くらいでしょうか?

  • フルマラソン、ハーフマラソンで、フラットでタイムの出る大会を探していま

    フルマラソン、ハーフマラソンで、フラットでタイムの出る大会を探しています。当方新潟県在住ですが、調子が上がってきた頃には積雪の時期に入りレースがありません。今年度は関東への遠征を考えていますが、どの大会が良いのかアドバイスいただけると助かります。