• 締切済み

Mysqlを使用した構造

現在試合結果ページを作成しています。 参考サイト:http://www.so-net.ne.jp/antlers/games/484 上記が参考サイトであり、各表組み(レイアウト)は完成しています。 マッチレビューから下は作っていませんので省きます。 残りは上から順にスコア、得点者、各詳細(シュートの本数など)、警告者、メンバー(スタメンとサブ)。 Mysqlにて1.試合日程 2.試合結果のテーブルを作りました。 テーブル内の構図は 1.試合日程のテーブル id、日付、対戦相手、場所など 2.試合結果のテーブル id、試合日程id、得点、失点、各詳細 を作りました。 ここからが困っており、得点者、警告者、メンバー(スタメンとサブ)の構図なんですが、 各項目ごとにテーブルを作った方がよいのか、試合結果テーブルに入れた方がよいのか迷っています。 自分が考えていたのは 3.得点者テーブル id、試合結果id、ホームの得点者、アウェイの得点 4.警告者テーブル id、試合結果id、ホームの警告者、アウェイの警告者 5.メンバー(スタメンとサブ)のテーブル id、試合結果id、ホームのスタメン、ホームのサブ、アウェイのスタメン、アウェイのサブ として作ることを考えていたのですが、いかがでしょうか? 一番効率がよく早く出来る方法を教えていただけないでしょうか? 宜しくお願いします。

  • MySQL
  • 回答数1
  • ありがとう数0

みんなの回答

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.1

ポイントは試合結果テーブルを分けることだと思います。そして、得点者テーブルと警告者テーブルは必要ないでしょう。あとでビューを作りましょう。 以下のような設計を提案します。 1 テーブル 6種類 (1) メンバテーブル(id,名前,ポジション) (2) コートテーブル(id,コート名、所在地) (3) 対戦チームテーブル(id,チーム名,ホームコートid) (4) 試合テーブル(id,日付,対戦チームid,コートid,ホームアウェイ区分) (5) 試合選手情報テーブル(試合id,ポジションコード,選手id) ポジションコード20をサブに、21を途中出場とする。 (6) 試合情報テーブル(試合id,情報コード,データ) この試合情報テーブルの情報コードが大切で、例えば、 1:試合得点->データは4桁で2桁自チーム得点、2桁相手チーム得点 2:得点者->データはメンバidで、当然得点と同じレコード数になる。 3:警告者->データはメンバid 4:PK情報->10ビットを10進数化し記録、1ビートがゴールかセーフかを意味する。 5:退場者->データはメンバid 6:試合時間 7:その他 などと決めて、横に項目を広げないようにします。 試合情報テーブルのレコード例 101,2,506 2 E-R図 対戦チームテーブル<-+-試合テーブル<--試合情報テーブル-->メンバテーブル   コートテーブル<----+ 3 ビュー (1)試合出場選手出力ビュー SELECT メンバid, 日付 FROM 試合テーブル,試合選手情報テーブル WHERE 試合テーブル.id = 試合選手情報テーブル.試合id AND (ポジションコード<=11 OR ポジションコード=21) (2)ホーム得点者情報ビュー SELECT メンバid, 日付 FROM 試合テーブル,試合情報テーブル WHERE 試合テーブル.id = 試合情報テーブル.試合id AND ホームアウェイ区分 = 0 AND 情報コード = 2 (3)各選手アウェイ得点集計ビュー SELECT データ,COUNT(*) FROM 試合テーブル,試合情報テーブル WHERE 試合テーブル.id = 試合情報テーブル.id AND ホームアウェイ区分 = 1 AND 情報コード=2 GROUP BY データ デバッグしていませんが、このようにリレーションを効かせると自由に情報を集計できます。

関連するQ&A

  • MySQLの構造について

    応援しているサッカーチームの試合データをMySQLを利用しテーブルに格納したいと考えています。 そこでMySQLやPHPに詳しい方にお聞きしたいことがあります。 例えばA・B・Cと3チームあるとしたら、A対B、A対Cの試合データは格納しますが、B対Cのデータは不要です。あくまでもAチームに関するデータのみを格納し、私が開設しているサイトで閲覧者に検索フォームから自由な形でデータを参照できるようにしたいです。 参考までに格納したい試合のデータは下記のようなデータです。 http://www.j-league.or.jp/result/2014/j2/030201.html 現在、既に一定のデータはテーブルに格納しています。現在のテーブルの構造です。 https://www.dropbox.com/s/z2qc2zff2fn8m8f/gamedb.pdf?dl=0 スタメンの選手やベンチの選手、交代選手、警告をもらった選手、得点者などはテーブルに格納していません。これらのデータは試合ごとに大きく数が異なるのでどのようにして格納すれば良いのか分からなかったので。 現在は格納していないこれらのデータを格納することで下記のような条件を指定しても対象データが羅列されるようにしたいです。 ・○○選手がイエローカードをもらった試合。 ・点を取られている選手ランキング。□□選手(※対戦相手の選手)には一番点を取られているなど。 ・○○選手がスタメンだった試合。 ・○○選手が途中出場した試合。 ・○○選手はこれまで△試合に▲分出場している。 ・□分~□分の間の得点は何点。逆に失点は何点など。 などなどです。 私が現在思いついている構造ですが、新しくテーブルを複数作成する。こういったケースではそれぞれのテーブルに共通のIDを振る必要があるとのことですが、これは日付(開催日)で代用しようと思っています。同じ日に2試合は絶対にないので。 作成するテーブルは下記のようにします。 ・ホームチームスタメンテーブル ・アウェーチームスタメンテーブル ・ホームチームの警告をもらった選手テーブル ・アウェーチームの警告をもらった選手テーブル ・ホームチーム得点者テーブル ・アウェーチーム得点者テーブル .....などなど。 こういったテーブルを作成し、それぞれID(開催日)と一定数のカラムを予め用意する。得点者のテーブルでしたら1試合で一方のチームが10点を取ることは限りなく0に近いのでとりあえず10用意する。同じように得点した時間も10用意。 datadating(開催日) | goal_1_min(得点時間) |goal_1(得点者) | goal2_min(得点時間) | goal2(得点者) |.......... このように格納していけば思い通りの結果が得られるようになるのかな?と思っていますが、果たしてこのようなテーブルで作成していき、後々サイト側の検索フォームから指定した条件で無事に結果を得られるか不安です。 ちょっとしたことでも良いので、詳しい方の意見をお聞きしたいです。 どうぞよろしくお願いします。 長文失礼しました。

    • ベストアンサー
    • MySQL
  • sql文

    現在試合結果のSQL文を作っています。 テーブルは下記内容になっており、今までは個々のテーブルに試合日程IDを渡して表示させていました。 今までは ("select from 試合日程テーブル") ("select from 試合結果テーブル where 試合日程ID = 試合日程id") ("select from 試合味方得点者テーブル where 試合日程ID = 試合日程id") ("select from 試合相手得点者テーブル where 試合日程ID = 試合日程id") 現在はもっと簡単にできるのではないかと思い作り直そうと思っています。 試合日程テーブル | id | 相手 | | 0001 | 相手A | | 0002 | 相手B | | 0003 | 相手C | 試合結果テーブル | id | 試合日程ID | 得点 | 失点 | | 1 | 0001 | 6 | 0 | | 2 | 0002 | 4 | 4 | | 3 | 0003 | 0 | 5 | 味方得点者 | id | 試合日程ID | 得点者 | | 1 | 0001 | Aさん | | 2 | 0001 | Aさん | | 3 | 0001 | Bさん | | 4 | 0001 | Cさん | | 5 | 0001 | Dさん | | 6 | 0001 | Dさん | | 7 | 0002 | Aさん | | 8 | 0002 | Bさん | | 9 | 0002 | Cさん | | 10 | 0002 | Dさん | 相手得点者 | id | 試合日程ID | 得点者 | 1 | 0002 | 相手Aさん | | 2 | 0002 | 相手Bさん | | 3 | 0002 | 相手Cさん | | 4 | 0002 | 相手Cさん | | 5 | 0003 | 相手Aさん | | 6 | 0003 | 相手Aさん | | 7 | 0003 | 相手Aさん | | 8 | 0003 | 相手Cさん | | 9 | 0003 | 相手Cさん | ここで各試合結果を出したときに相手得点者、味方得点者をidごとに出す方法を教えていただけないでしょうか? 試してみたところ ("select from 試合日程テーブル") ("select from 試合結果テーブル) ( left join 試合味方得点者テーブル on 試合結果テーブル.試合日程ID = 試合味方得点者テーブル.試合日程id") ( left join 試合相手得点者テーブル on 試合結果テーブル.試合日程ID = 試合相手得点者テーブル.試合日程id") (where 試合結果テーブル.試合日程ID = 試合日程id) で試してみましたがうまくきませんでした。 上記のテーブルの内容で1試合に対し、得点者がちゃんと表示されるようにしたいです。 例:試合日程IDが0001の場合は味方得点者が6人分表示され、00002の場合は味方得点者が4人分と相手得点者が4人分表示されるように。 わかりにくい説明ではあると思いますが、宜しくお願いいたします。 足りない部分を指摘いただけると幸いです。

    • 締切済み
    • PHP
  • サッカーのホームアンドアウェー式について

    サッカーのホームアンドアウェー式ではアウェーでの得点が倍になると聞きましたが、2試合とも試合に負けたとしても、アウェーでの得点が多く総得点で勝っていれば勝ちになるのでしょうか?

  • 条件によって抽出するデータを変える

    PHPやMySQLの勉強を兼ねてサッカーチームの試合データをテーブルに格納しました。 テーブルは下記のようにしました。他にもフィールドはありますがとりあえず3つのみ。 左からホームゲーム(H)かアウェーゲーム(A)か。ホームチームの得点。アウェーチームの得点です。 table名:gamedata h_a(VARCHAR型)|home_score(INT型)|away_score(INT型) H|5|3 A|2|1 A|3|4 このようなテーブルから「2得点以上5得点未満の試合」を抽出したい場合はどのようなSQL文になるのでしょか? 上記のテーブルだと「A|3|4」このデータだけ抽出されることになります。 問題点だと思うのは下記の二つ。 一つはホームゲームの場合は「home_score」に得点が格納されていますが、アウェーゲームの場合は「away_score」に得点が格納されていることになります。 二つ目はデータがまだ不十分で得点が何も入力されていないデータもあるという点です。こういうデータはスルーしたいです。 ご存知の方いらっしゃいましたらご教示ください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysql 検索方法

    現在、mysqlの検索方法で悩んでいます。一番スマートな方法を教えていただけたらありがたいです。 内容)巨人一軍と巨人二軍の各試合結果を格納しているテーブルがあります。ここから、2011年の巨人二軍の勝敗を集計する。 テールブル) ■チームテーブル(id,チーム名) 1,巨人一軍|2,巨人二軍|3,・・・とデータが入っている。尚、idはプライマリーキー ■試合結果テーブル(r_id,自チームid、相手チーム、自チーム得点、相手チーム得点、試合年月日) 1,1,阪神一軍,2,3,2011-05-01|2,1,阪神一軍,5,10,2011-06-01|3,2,広島二軍,1,0,2011-05-02|・・・とデータが入っている。尚r_idはプライマリーキー このデータベースから2011年の巨人二軍の勝敗(○勝□敗)及び勝率(0.55等)をスマートに算出するには、どう行いますか? mysql 5.0.75-0 ubuntu Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.6

    • ベストアンサー
    • MySQL
  • サッカー日本代表の全試合の歴代フォーメーション

    サッカーが好きで以下のような趣味のサイトを作っています。 『オフト監督以降のサッカー日本代表における、 全試合のスタメン・フォーメーション』 http://www.atsushi-masuda.com/football/ まだまだ作成途中ですが、半分ぐらいまでできつつあります。 ところが今のところ、一つだけ全くフォーメーションの情報がない試合があります。 日程:2010年1月6日 試合内容:アジアカップ カタール大会予選 対戦国: イエメン(アウェー) スコア:3-2で日本の勝利 監督:岡田武史 http://www.atsushi-masuda.com/football/20100106.html 確かこの試合は、既に予選突破を決めていて、 1月の最初のスケジュールと言うこともあり、 今まで代表に呼ばれてこなかったメンバーで のぞんだ試合と記憶しています。 しかも、アウェーでテレビ放送されていません。 スタメンはJFAのホームページから探すことができたのですが、 どのようなフォーメーションかは全く分かりません。 どなたかご存じの方がいましたら、教えていただければ助かります。 その他、作成中のホームページで、間違いやご意見などありましたら、 併せて教えてください。 よろしくお願いいたします。

  • mysqlについて

    いつもお世話になっております。 またまたmysqlについて質問させていただきます。 下記のようなテーブルがあります。 tabel A | type_id | member_id | date| | 2 | 45| 2012-6-21 | | 2 | 46| 2012-6-22 | | 2 | 47| 2012-6-19 | | 2 | 48| 2012-6-10 | | 4 | 49| 2012-5-23 | | 4 | 50| 2012-5-24 | | 4 | 51| 2012-5-21 | | 4 | 52| 2012-5-22 | | 3 | 53| 2012-7-25 | | 3 | 54| 2012-7-26 | | 3 | 56| 2012-7-23 | | 3 | 57| 2012-7-24 | | 1 | 58| 2012-8-17 | | 1 | 59| 2012-8-18 | | 1 | 60| 2012-8-25 | | 1 | 61| 2012-8-26 | table B | type_id | name | | 1 | aaaa | | 2 | bbbb | | 3 | cccc | | 4 | dddd | 下記の条件で値を取得するSQLをご教授いただけますでしょうか 1.type_idでまとめたものを3件ずつ取得   (三件の中で一番直近のdateを持っているもの順にtype_idを並べる) 2.type_idのまとめた三件がdateの直近順 3.type_idのそれぞれのnameをくっつける 結果として | type_id | member_id | date|name | 4 | 51| 2012-5-21 |dddd | 4 | 49| 2012-5-23 |dddd | 4 | 50| 2012-5-24 |dddd | 2 | 48| 2012-6-10 |bbbb | 2 | 47| 2012-6-19 |bbbb | 2 | 45| 2012-6-21 |bbbb | 3 | 56| 2012-7-23 |cccc | 3 | 57| 2012-7-24 |cccc | 3 | 53| 2012-7-25 |cccc | 1 | 58| 2012-8-17 |aaaa | 1 | 59| 2012-8-18 |aaaa | 1 | 60| 2012-8-25 |aaaa 説明が下手ですみません…分かりにくければ補足説明いたします…

    • ベストアンサー
    • MySQL
  • Excel 順位表

    サッカーのjリーグの結果のように,(1)勝ち点 (2)得失点 (3)総得点の順で順位付けをするリーグ戦があったとして,残り何勝で優勝するといったマジックナンバーを計算させることは可能でしょうか。一応,4チームで全12試合(ホーム&アウェイ)を考えています。

  • アウェーゴールのルールについて教えてください

    サッカーのホーム&アウェー方式のトーナメントでは、 得失点差で同じになった時、2倍になるアウェーゴール がありますよね。 そこで疑問に思った事があるんですが、2試合の得失点差 とアウェーゴールが共に同じのため延長戦に入り、その延 長戦に入った得点はどうなるんでしょうか? アウェーゴールが適応されるなら延長戦でアウェー側が 点を入れるとホーム側が勝つためには30分で最低でも 2点以上必要になります。 それだとホームで戦うチームが逆にアウェーゴールが決 められる時間が増える分不利になると思うのですが…。 延長戦に入った場合でも、アウェーゴールは適応される のでしょうか? サッカーに詳しい方、教えてください。お願いします。

  • データベース(MySQL)のテーブル更新について

    サッカーの試合データをテーブルに格納、それをサイトの管理画面から修正する為のプログラムで詳しい方にお聞きしたいことがあります。 テーブルの更新は下記サイトを参考にしました。 http://ponk.jp/php/basic/php_mysql#page_index4 「udon_update.php」の箇所で頓挫しています。 流れとしましては試合ID(game_id)を受け取り、「members」テーブルから交代ID(change_id)があるものだけを抽出。 その交代IDを元に「change」テーブルから交代選手のIDを取得、「player」テーブルから選手名を取得してテキストフィールドに表示する。 主なテーブルは下記の通りです。 □player_table(所属選手のデータを格納) player_id|last_name|first_name 00818|田中|太郎 00815|山田|健太 00812|佐藤|真一 □membersテーブル(スタメン選手・控え選手・交代情報などを格納) game_id|player_id|entry|change_id| 001115|00818|start|0000001 001115|00815|start|null 001115|00812|sub|0000001 □changeテーブル(交代選手を格納) change_id|player_in_id |player_out_id |change_time |change_time_at 0000001|00818|00812|65|3 下記が現在のコードです。 -------------------------------------------------------------------------- <?php //player_idを受け取りplayerテーブルから選手名を照会 function player_inquiry($player_id){ global $pdo; global $last_name; global $first_name; $st = $pdo->query("SELECT * FROM player WHERE player_id=$player_id"); while ($row = $st->fetch()) { $last_name = htmlspecialchars($row['last_name']); $first_name = htmlspecialchars($row['first_name']); } return; } //メンバーテーブル(members)から交代データ取得 $st = $pdo->prepare("SELECT * FROM members WHERE change_id NOT LIKE NULL AND game_id=$game_id"); $st->execute(array($game_id)); while ($row = $st->fetch()) { $change_id = htmlspecialchars($row['change_id']); //change_idを元に交代テーブル(change)からデータ取得 $st = $pdo->prepare("SELECT * FROM change WHERE change_id=$change_id"); $st->execute(array($change_id)); $row = $st->fetch(); $change_time = htmlspecialchars($row['change_time']); $change_time_at = htmlspecialchars($row['change_time_at']); $change_reason = htmlspecialchars($row['change_reason']); print $change_time; player_inquiry($row['player_in']); ?> <input type="text" style="width:25px;ime-mode:inactive;" maxlength="2" name="change_time">分/AT<input type="text" style="width:25px;ime-mode:inactive;" maxlength="2" name="change_time">分<br> OUT<input type="text" style="width:120px;" name="last_name" value="<?php echo $last_name ?>"> <input type="text" style="width:120px;" name="first_name" value="<?php echo $first_name ?>"><br> <?php player_inquiry($row['player_out']); ?> IN<input type="text" style="width:120px;" name="last_name" value="<?php echo $last_name ?>"> <input type="text" style="width:120px;" name="first_name" value="<?php echo $first_name ?>"> <?php } ?> -------------------------------------------------------------------------- このコードで実行しても何も取得されません。どのように変更すればデータが取得できるようになるでしょうか? ご存知の方いらっしゃいましたらご教示ください。 よろしくお願いします。

    • ベストアンサー
    • PHP