MySQL にデータを挿入した後、条件付きで 2 つの値を増加します
P粉937382230
P粉937382230 2023-09-02 10:52:17
0
2
563
<p>現在、フットボール データベースには次の 3 つのテーブルがあります。</p> <pre class="brush:php;toolbar:false;">チーム(名前) 季節(名前、始まり、終わり) ゲーム(ID、日付、シーズン、ホームチーム、アウェイチーム、ホームチームスコア、アウェイチームスコア) (ホームチーム、アウェイチーム、シーズンは外部キーです)</pre> <p>ここで、各チームの得点と失点、および各シーズンで獲得したポイント (引き分けごとに 1 ポイント、勝利ごとに 3 ポイント) を記録する新しいテーブルを作成したいと思います。これによりランキングが取得しやすくなります。 </p> <p>次のようなテーブルを作成することを検討しました。</p> <pre class="brush:php;toolbar:false;">統計(シーズン、チーム、得点、失点、ポイント)</pre> <p>そして、新しい一致が挿入されるたびに、このテーブルも更新します。このテーブルには、各チームのシーズンの組み合わせが 1 行含まれます。冗長性を導入していることはわかっているので、これが最適な解決策かどうかはわかりませんが、この情報は頻繁に計算する必要があるため、役立つかもしれないと思いました。この情報を更新するトリガーを作成したいのですが、その方法がよくわかりません。どのチームが試合に参加しているかに応じて、統計テーブルの 2 つの行を更新する必要があります。ホームでもアウェーでも、別の値で更新する必要があります。 </p> <p>理想的には、チームがゲームが属するシーズンのレコードを挿入していない場合、このトリガーはこの新しいテーブルにエントリを作成するはずですが、そのような条件が MySQL で可能かどうかさえわかりません。 私が行ったことのテストを提供していないことはわかっていますが、それは、オンラインで同様のリクエスト (より一般的には、必要な情報を簡単にクエリできるリクエスト) が実際には見つからなかったからです。 </p> <p>また、この状況に対処する方法についてのより良いアイデアも歓迎します。 </p>
P粉937382230
P粉937382230

全員に返信(2)
P粉018653751

次のような構造を検討する必要があると思います:

リーリー

この構造も最適ではありません。 私の個人的な意見では、より良い構造を使用することもできます:

リーリー

Goal テーブルはすべてのゴールを記録するために使用され、「HomeTeamScore」フィールドと「AwayTeamScore」フィールドの使用を避けて、そこから試合結果を構築できます。

統計テーブルに関しては、誰がポイントを獲得したかを知る必要があるため、最終的なテーブル構造にこだわりましょう:

リーリー

Matches のステータス フィールドの値は次のとおりです: ['1','X','2']

  • 1 - ホームチームの勝利
  • XX - ドロー
  • 2 - アウェイチームの勝利

これにより、たとえば ID 12 のチームなど、統計を計算するためのすべてを簡単に入手できます。 リーリー

これを開始点として使用して、group by 関数と group 関数を使用してチーム統計を計算する、もう少し複雑なクエリを構築できます。 このようなクエリを正常に作成したら、

Views を使用することをお勧めします。

ちなみに、実行したいクエリは重くないので、必ずしもトリガーが必要なわけではありません。最初にデータベースの設計を検討してください。

いいねを押す +0
P粉953231781

トリガーを使用して冗長データを維持するよりもはるかに簡単な方法は、ビューを使用することです。これは単なる基本的な和集合の合計です:

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート