Php 使用count和sum从多个表中收集数据

Php 使用count和sum从多个表中收集数据,php,mysql,sql,Php,Mysql,Sql,我在某处找到了这个,但它对我不起作用 建议的解决方案: 另一个选项是分别从所有表中获取数据,然后显示它 问题: 我希望通过单个查询从多个表中获取数据。将添加金额,并从所有表中计算用户ID 附加说明: 它应该收集关于用户id=1111的所有信息,并保存在两个变量中 Userid=1111,在某些表中可能不存在 预期结果如下: 您的总额:$total;您的金额:$amount 根据建议。以下是我迄今为止所取得的成就,以及我如何努力展示它。它不显示任何内容,不显示任何错误: 如果使用单一查询,则结果显

我在某处找到了这个,但它对我不起作用

建议的解决方案:

另一个选项是分别从所有表中获取数据,然后显示它

问题:

我希望通过单个查询从多个表中获取数据。将添加金额,并从所有表中计算用户ID

附加说明: 它应该收集关于用户id=1111的所有信息,并保存在两个变量中

Userid=1111,在某些表中可能不存在

预期结果如下:

您的总额:$total;您的金额:$amount

根据建议。以下是我迄今为止所取得的成就,以及我如何努力展示它。它不显示任何内容,不显示任何错误: 如果使用单一查询,则结果显示良好

SELECT sum(amount) as amount , COUNT(userid) as total FROM table1 WHERE userid='1111'  union all 
SELECT sum(amount) as amount,  COUNT(userid) as total FROM table2 WHERE userid='1111' union all 
SELECT sum(amount) as amount,  COUNT(userid) as total FROM table3 WHERE userid='1111' union all 
SELECT sum(amount) as amount,  COUNT(userid) as total FROM table4 WHERE userid='1111' union all 
SELECT sum(amount) as amount,  COUNT(userid) as total FROM table5 WHERE userid='1111'

如果您需要所有表的单行,则只需在
UNION
上执行外部选择。现在,正如您在注释中提到的,一些表可能不包含
UserID
,您需要使用
COALESCE
来确保如果
null
则将
0
作为所选值

SELECT sum(amount) as amount , COUNT(userid) as total FROM table1
Group By userid
如果要使用联接,则需要使用
左联接
,还需要对每个表分别进行
求和
,然后将其添加到主总计中。

尝试以下操作:

SELECT SUM(COALESCE(data.Amount,0)) as Amount ,SUM(COALESCE(data.total,0)) as total 
FROM
   (
     SELECT COALESCE(sum(amount),0) as amount , COALESCE(COUNT(userid)) as total FROM table1 WHERE userid='1111'  
     UNION ALL
     SELECT COALESCE(sum(amount),0) as amount,  COALESCE(COUNT(userid)) as total FROM table2 WHERE userid='1111' 
     UNION ALL
     SELECT COALESCE(sum(amount),0) as amount,  COALESCE(COUNT(userid)) as total FROM table3 WHERE userid='1111' 
     UNION ALL
     SELECT COALESCE(sum(amount),0) as amount,  COALESCE(COUNT(userid)) as total FROM table4 WHERE userid='1111' 
     UNION ALL  
     SELECT COALESCE(sum(amount),0) as amount,  COALESCE(COUNT(userid)) as total FROM table5 WHERE userid='1111'
  ) as data

你们所有的桌子都是相互关联的吗?使用
userID
@ameya是的,所有用户都共享相同的userID。那么您应该查看
连接
$ameya,您可以用示例回答,用连接查询您的要求是什么?是否要为用户1111获取每个表的金额和总额?表[amount被命名为rate]中的一个字段就是问题所在。纯代码答案会自动标记为低质量,因此在stackoverflow时不鼓励使用。今后请详细说明你的答案,并解释为什么它是问题的解决方案。这有助于其他用户。@Sayka:请详细说明您的答案,并解释它是如何解决问题的。这将有助于其他人在以后的搜索中看到您的代码。您可以查看我的其他答案,其中我已经向新手和处于这种情况的人解释了多少。如果需要解释的话,我会给你的。
SELECT SUM(COALESCE(data.Amount,0)) as Amount ,SUM(COALESCE(data.total,0)) as total 
FROM
   (
     SELECT COALESCE(sum(amount),0) as amount , COALESCE(COUNT(userid)) as total FROM table1 WHERE userid='1111'  
     UNION ALL
     SELECT COALESCE(sum(amount),0) as amount,  COALESCE(COUNT(userid)) as total FROM table2 WHERE userid='1111' 
     UNION ALL
     SELECT COALESCE(sum(amount),0) as amount,  COALESCE(COUNT(userid)) as total FROM table3 WHERE userid='1111' 
     UNION ALL
     SELECT COALESCE(sum(amount),0) as amount,  COALESCE(COUNT(userid)) as total FROM table4 WHERE userid='1111' 
     UNION ALL  
     SELECT COALESCE(sum(amount),0) as amount,  COALESCE(COUNT(userid)) as total FROM table5 WHERE userid='1111'
  ) as data
SELECT sum(table1.amount + table2.amount + table3.amount + table4.amount) as amount, COUNT(table1.userid) + COUNT(table2.userid) + COUNT(table3.userid) + COUNT(table4.userid) as total
FROM table1, table2, table3, table4
WHERE table1.userid='1111' OR table2.userid='1111' OR table3.userid='1111' OR table4.userid='1111'