将两个SQL查询组合在一起,从一个表中获取where子句,并且只计算另一个表中的出现次数

时间:2014-03-06 19:28:55

标签: php mysql sql sql-server

我有一个运行2个查询的PHP脚本。第一个查询是

"SELECT PID , EXPERIENCE , LASTLOGIN , WON , LOST , TIED , PRODUCT1_COUNT , PRODUCT2_COUNT , PRODUCT3_COUNT , AD_FREE , CODENAME , FB_UID , WSBALANCE , BEST_GAME_SCORE , BEST_WORD_SCORE , BEST_MOVE_SCORE , MW_PLAYED 
 FROM user 
 WHERE (PID > 9 AND (('. $serverTime .'- LASTLOGIN < 1209600) OR (AD_FREE + PRODUCT1_COUNT + PRODUCT2_COUNT + PRODUCT3_COUNT + PRODUCT4_COUNT ) > 0 ))"

然后脚本的下一步是遍历此查询的每一行以构建一个html表。在此过程中,我正在查询第二个表(games1)以获取第一个查询返回的活动游戏数量。

$id = $row['PID'];

$pSQL = "SELECT COUNT(SID) AS c 
         FROM games1 
         WHERE ACTIVE = 1 AND (P1_UID = $id OR P2_UID = $id OR P3_UID = $id OR P4_UID = $id)";

我一直试图将我的大脑包围在如何使用join来组合这两个查询,但我只是没有得到它。我非常感谢帮助,因为这个组合会节省我们的脚本一点时间。

1 个答案:

答案 0 :(得分:1)

您可以使用join,下面的查询将提供来自用户表的数据和来自每个用户的游戏表的计数

SELECT 
  u.PID,
  u.EXPERIENCE,
  u.LASTLOGIN,
  u.WON,
  u.LOST,
  u.TIED,
  u.PRODUCT1_COUNT,
  u.PRODUCT2_COUNT,
  u.PRODUCT3_COUNT,
  u.AD_FREE,
  u.CODENAME,
  u.FB_UID,
  u.WSBALANCE,
  u.BEST_GAME_SCORE,
  u.BEST_WORD_SCORE,
  u.BEST_MOVE_SCORE,
  u.MW_PLAYED ,
  COUNT(g.SID) AS c  
FROM
  `user` u
  LEFT JOIN games1 g
  ON (
    (g.P1_UID = u.PID
    OR g.P2_UID = u.PID
    OR g.P3_UID = u.PID
    OR g.P4_UID = u.PID) AND  g.ACTIVE = 1 
  ) 
WHERE (PID > 9 
    AND (( '. $serverTime .' - u.LASTLOGIN < 1209600) 
      OR (u.AD_FREE + u.PRODUCT1_COUNT + u.PRODUCT2_COUNT + u.PRODUCT3_COUNT + u.PRODUCT4_COUNT) > 0)
  ) 
  GROUP BY u.PID