3

私は現在、試合結果の表を持っています

+----------+----------+--------+-----------+--------+-----------+-----------+-----------+
| hometeam | awayteam | p1home | p2home... | p1away | p2away... | homescore | awayscore |
+----------+----------+--------+-----------+--------+-----------+-----------+-----------+

私はかなり不格好でクエリします

SELECT
(SELECT COUNT(hometeam)
FROM fixture_data
WHERE (p1home = '$playerID' OR p2home = '$playerID' OR...)
AND hometeam = '$teamname')
+
(SELECT COUNT(awayteam)
FROM fixture_data
WHERE (p1home = '$playerID' OR p2home = '$playerID' OR...)
AND awayteam= '$teamname')
AS matches_played

特定のプレーヤー $playerID が特定のチーム $teamname でプレーした試合数を取得する

テーブルプレーヤーはシンプルです

+----------+-----------+-----------+
| playerID | firstname | surname   |
+----------+-----------+-----------+

電話した瞬間

SELECT * FROM players

2 つのクエリを 1 つの MYSQL クエリに結合してテーブルを作成するのに苦労しているため、各プレーヤーに対して PHP 経由で最初のクエリを呼び出します。

+----------+-----------+-----------+----------------+
| playerID | firstname | surname   | matches_played |
+----------+-----------+-----------+----------------+

これは可能ですか?それとも、PHP を使用した現在のソリューションは、効率的になるでしょうか?

4

3 に答える 3

2

プレーヤーリストをマッチテーブルから取り出して、プレーヤー、チーム、マッチの別のテーブルに入れると、これを簡単に行うことができます。次に、あなたの合計は、3つに参加して試合を数えることの問題になります。プレーヤーが家にいるか離れているか、または特定の試合を何人のpplがプレイしたかは関係ありません。

于 2012-11-23T14:52:57.283 に答える
2

これらのクエリを次のように組み合わせることをお勧めします。

SELECT COUNT(*) AS matches_played
FROM fixture_data
WHERE (p1home = '$playerID' OR p2home = '$playerID' OR...)
AND ( awayteam= '$teamname' OR hometeam = '$teamname')
于 2012-11-23T14:50:14.817 に答える
1

これはうまくいくはずです:

SELECT p.playerID, p.firstname, p.surname, COUNT(*)
  FROM players p, fisture_data f
 WHERE p.playerID='$playerID'
    AND (((p.playerID = f.p1home OR p.playerID=f.p2home...) AND f.hometeam='$teamname')
        OR ((p.playerID = f.p1away OR p.playerID=f.p2away...) AND f.awayteam='$teamname'))
GROUP BY p.playerID, p.firstname, p.surname

しかし、このモデルは最適ではありません。プレーヤー/試合/チームのリンクを格納する新しいテーブルを作成する必要があります。

于 2012-11-23T14:52:27.330 に答える