PHP / MySQL一个查询中有多个select语句的问题

时间:2011-01-29 20:51:16

标签: php sql mysql

我在尝试从表中获取一些数据时遇到了问题。

它包含灯具的结果,我试图查询它以输出显示最高胜率的玩家的统计页面。

字段如下:

  • id(每场比赛的唯一ID)
  • fid(灯具ID,因为一个灯具最多可以有13个匹配)
  • 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 

到目前为止,我所获得的查询工作正常,可以从家庭玩家那里获取信息,但它并不能同时评估客场球员。

继承我的代码:

$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 />";
}

我想要做的是使用另一个选择来训练离开的统计数据,然后将它们添加到主统计数据中。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用UNION ALL在select语句中添加它们,然后重新聚合结果:

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

答案 1 :(得分:0)

目前还不太清楚你想做什么,所以有几个可能的答案。

首先,如果你想要的只是在主统计数据之后打印离开的统计数据,你可以简单地复制你发布的整个代码,除了将“hscore”和“hpid”改为“ascore”和“apid”。 / p>

如果您真正想要的是为每位玩家总结主场和客场得分,那么您有多种选择。关键是对于一个特定的球员,你并不关心他们是主场还是客场球员,只是他们在场上比赛。所以你可以尝试这个查询:

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