Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 计算两个不同表中的总条目数_Php_Mysql_Sql_Ranking - Fatal编程技术网

Php 计算两个不同表中的总条目数

Php 计算两个不同表中的总条目数,php,mysql,sql,ranking,Php,Mysql,Sql,Ranking,我试图根据用户提交到两个不同表的条目数对用户进行排名 表gvr: rid | jid --------------- 1 54 2 54 3 54 4 75 5 75 表gos: sid | jid --------------- 1 54 2 54 3 75 4 75 5 23 6 23 预期结果: jid | overall_cnt | gvr_cnt | gos_cnt -------------

我试图根据用户提交到两个不同表的条目数对用户进行排名

表gvr:

rid | jid 
---------------
1     54
2     54
3     54
4     75
5     75
表gos:

sid | jid
---------------
1     54
2     54
3     75
4     75
5     23
6     23
预期结果:

jid | overall_cnt | gvr_cnt | gos_cnt
----------------------------------
54    5            3          2
75    4            2          2
23    2            0          2
我有:

(SELECT jid, count(*) gvr_count
FROM gvr 
WHERE jid IS NOT NULL
GROUP BY jid)
UNION ALL 
(SELECT jid, count(*) gos_count
FROM gos
WHERE jid IS NOT NULL
GROUP BY jid)

但这是极不正确的。我一直在寻找类似于我的情况的其他帖子,但还没有找到任何有太多价值的东西。我正在考虑将数据操作卸载到PHP上,但是在一个查询中完成它会很方便

这可能不完全正确,但我希望您可以从这里开始:

SELECT innerQuery_1.jid AS jid, 
       (innerQuery_1.gvr_count + innerQuery_2.gos_count) AS overall_cnt, 
       innerQuery_1.gvr_count AS gvr_count,
       innerQuery_2.gos_count AS gos_count
FROM   (SELECT jid, count(*) gvr_count
        FROM   gvr 
        WHERE  jid IS NOT NULL
        GROUP BY jid) AS innerQuery_1,
       (SELECT jid, count(*) gos_count
        FROM   gos
        WHERE jid IS NOT NULL
        GROUP BY jid) AS innerQuery_2
GROUP BY innerQuery_1.jid

这可能不完全正确,但我希望您可以从这里开始:

SELECT innerQuery_1.jid AS jid, 
       (innerQuery_1.gvr_count + innerQuery_2.gos_count) AS overall_cnt, 
       innerQuery_1.gvr_count AS gvr_count,
       innerQuery_2.gos_count AS gos_count
FROM   (SELECT jid, count(*) gvr_count
        FROM   gvr 
        WHERE  jid IS NOT NULL
        GROUP BY jid) AS innerQuery_1,
       (SELECT jid, count(*) gos_count
        FROM   gos
        WHERE jid IS NOT NULL
        GROUP BY jid) AS innerQuery_2
GROUP BY innerQuery_1.jid


您的查询非常接近。您希望
联合所有
,然后按分组:

select jid, sum(gvr_count) + sum(gos_count) as Overall_Count,
        sum(gvr_count) as gvr_count, sum(gos_count) as gos_count
from ((SELECT jid, count(*) gvr_count, 0 as gos_count
       FROM gvr 
       WHERE jid IS NOT NULL
       GROUP BY jid
      )
      UNION ALL 
      (SELECT jid, 0 as gvr_count, count(*) gos_count
       FROM gos
       WHERE jid IS NOT NULL
       GROUP BY jid
      )
     ) t
group by jid

我认为这是MySQL中确保获得所有“jid”的最佳方法,即使是只在一个表中的jid。

您的查询非常接近。您希望
联合所有
,然后按分组:

select jid, sum(gvr_count) + sum(gos_count) as Overall_Count,
        sum(gvr_count) as gvr_count, sum(gos_count) as gos_count
from ((SELECT jid, count(*) gvr_count, 0 as gos_count
       FROM gvr 
       WHERE jid IS NOT NULL
       GROUP BY jid
      )
      UNION ALL 
      (SELECT jid, 0 as gvr_count, count(*) gos_count
       FROM gos
       WHERE jid IS NOT NULL
       GROUP BY jid
      )
     ) t
group by jid

我认为这是MySQL中确保获得所有“jid”的最好方法,即使是那些只在一个表中的jid。

我更新了Gordon的答案这是最好的方法

 select jid ,sum(gvr_count)+ sum(gos_count) as OverallCount ,
  sum(gvr_count) as gvr_count, sum(gos_count) as gos_count
   from ((SELECT jid, count(*) gvr_count, 0 as gos_count
   FROM gvr 
   WHERE jid IS NOT NULL
   GROUP BY jid
  )
  UNION ALL 
  (SELECT jid, 0 as gvr_count, count(*) gos_count
   FROM gos
   WHERE jid IS NOT NULL
   GROUP BY jid
  )
 ) t
group by jid

我的回答是这是最好的方法

 select jid ,sum(gvr_count)+ sum(gos_count) as OverallCount ,
  sum(gvr_count) as gvr_count, sum(gos_count) as gos_count
   from ((SELECT jid, count(*) gvr_count, 0 as gos_count
   FROM gvr 
   WHERE jid IS NOT NULL
   GROUP BY jid
  )
  UNION ALL 
  (SELECT jid, 0 as gvr_count, count(*) gos_count
   FROM gos
   WHERE jid IS NOT NULL
   GROUP BY jid
  )
 ) t
group by jid

它没有返回jid 23它没有返回jid 23查询后,我错过了您在备注中提到的条件:)查询后,我错过了您在备注中提到的条件:)是否有任何东西会破坏mysql上的此查询?因为它在sqlfiddle中工作。但是我在让它在我的系统上运行时遇到了麻烦。有什么东西会破坏mysql上的这个查询吗?因为它在sqlfiddle中工作。但我在让它在我的系统上工作时遇到了麻烦。