2011-01-29 19 views
1

テーブルからデータを取得しようとして問題が発生しました。PHP/MySQL 1つのクエリで複数のSELECT文の問題

これにはフィクスチャの結果が含まれており、最も高い勝率のプレーヤーを表示する統計ページを出力するために照会しようとしています。

次のようにフィールドがある:

  • ID(各マッチのためのユニークなID)(一方、固定具13個の一致点で最大有することができるように固定具ID)
  • FID
  • HPID(ホームプレイヤーID)を
  • hscore(家庭用プレーヤーのスコア)
  • APID(離れたプレイヤーID)
  • ascore(離れたプレイヤーのスコア)

プレーヤーIDはので、私は、例えばだから、両方のフィールド

の統計情報を取得する必要があり、自宅や離れたフィールドに表示することができます

id fid hpid hscore apid ascore 
----------------------------------- 
1 1 1  1  2  0 
2 1 13 0  4  1 
3 1 5  1  6  0 
4 1 7  0  8  1 
5 1 9  1  10 0 
6 2 11 0  1  1 

そして、私が持っているクエリは、これまでに取得するため正常に動作しますホームの選手たちからの情報だが、離れた選手を同時に評価することはない。

HERESに私のコード:

$sql = mysql_query("SELECT hpid, SUM(hscore) AS won, COUNT(hpid) 
         FROM tbl_matches 
        GROUP BY hpid 
        ORDER BY won DESC"); 
while ($row = mysql_fetch_array($sql)) { 
    echo $row[hpid]." played: ".$row['COUNT(hpid)']." won: ".$row[won]."<br />"; 
} 

私が何をしたいのかは離れ統計ワークアウトに別の選択を使用して、自宅の統計にそれらを追加することです。

SELECT Id,SUM(Score) Score,SUM(Played) Played 
from  
    (SELECT hpid Id,SUM(hscore) Score,COUNT(*) Played 
    FROM tbl_matches 
    GROUP BY hpid 
    UNION ALL 
    SELECT apid,SUM(ascore),COUNT(*) 
    FROM tbl_matches 
    GROUP BY apid)X 
group by Id 
order by Score desc 

答えて

0

その後、agregate結果をUNIONを使用して、すべてのとでselect文にそれらを追加してみてください。

まず、あなたが家計の統計の後にアウェイ・スタットを印刷するだけであれば、「hscore」と「hpid」の変更を除くすべてのコードを「ascore」と「apid」に複製することができます。

あなたが実際に望むのは、各プレイヤーのホームスコアとアウェイスコアの両方を合計することです。次に、いくつかの選択肢があります。重要なのは、特定のプレイヤーにとって、彼らがプレイした家庭や離れたプレイヤーかどうかは気にしません。したがって、代わりにこのクエリを試すことができます:

SELECT pid, SUM(score) AS won, COUNT(pid) 
       FROM (
        SELECT hpid AS pid, hscore AS score FROM tbl_matches 
        UNION 
        SELECT apid AS pid, ascore AS score FROM tbl_matches 
      ) tbl_matches_union 
       GROUP BY pid 
       ORDER BY won DESC 
+0

あなたはそれを持っています!あなたの助けに感謝します! –

0

それはあなたが何をしたいのか明確ではないですので、いくつかの可能な答えがあります