次の問題のため、現在、テーブルの実行に非常に時間がかかるため、テーブルの最適化にご協力いただければ幸いです。
メインテーブル:
game {
game_id [PRIMARY KEY]
*team_id
*stadium_id
home_score
opponent_score
date
tour
half_home_score
half_opp_score
attendance
referee_id
coach_id
captain_id
}
players (contains all players that played in the game) {
*game_id
*team_id
*player_id
position
number
}
tries, conversions, penalties, dropgoals {
*player_id
*game_id
*team_id
}
team {
team_id [PRIMARY KEY]
country
}
player {
player_id [PRIMARY KEY]
*team_id
name
surname
fullname
DOB
POB
school
height
weight
position
}
私はすべての*_idタイプ(UNSIGNED INT [5])を作成する傾向がありますか?UNSIGNEDが必要かどうかは少しわかりません
必要なサイズに応じて、すべてのテキストはVARCHAR(500..200)です。
たとえば、DATE型を使用します。生年月日、日付
'*'-他のテーブルの主キーである外部キーを指します
1ページは特に遅く、何が起こるかは次のとおりです。
このページには特定のゲームのプレーヤーのラインナップが表示されているので、私のクエリは次のとおりです。
すべてのplayer_id's、number、position FROMplayersテーブルを選択します。WHEREgame_idは、trysテーブルからの特定のゲームのID getTries(player_id、game_id)です。。ドロップゴールテーブルからのgetDropgoals(player_id、game_id)
プレーヤーテーブルからのgetPlayerName(player_id)
受信した詳細をテーブルに出力
<tr>
<td>tries</td>...<td>dropgoals</td><td>position</td><td>player's name</td><td>number</td></tr>
誰かが目に見える落とし穴を指摘していただければ幸いです。
よろしく
// 編集
次のクエリを使用しましたが、trysテーブルで見つかった行のみを出力します。見つかったすべてのプレーヤーを出力しますが、彼が獲得した試行回数のみをカウントします。そのプレーヤーの試行がスコアリングされなかった場合は、プレーヤーの詳細を出力する必要がありますが、スコアリングされた試行の場合は0です。
クエリが正しいかどうかわかりません:SELECT ps.player_id、ps.position、ps.number、p.name、p.surname、COUNT(*)AS trysNo FROMplayers ps、player p、trys WHERE p.player_id = ps.player_id AND ps.game_id ='$ game_id' AND ps.team_id IS NULL AND trys.player_id = ps.player_id GROUP BY ps.player_id ORDER BY ps.number
トライを獲得しなかった場合にもプレーヤーを返すようにしたいのですが、今では、トライを獲得した場合にのみプレーヤーを返します。
誰か助けてもらえますか?