php - 使用 LEFT JOIN 计算行数

标签 php mysql

我在使用 LEFT JOIN 计算行数时遇到问题.. 所以我有 2 个表(域、聊天),我想提取每个域的聊天总数、打开聊天的数量和关闭聊天的数量。公共(public)列是“域”

这是我的代码:

$getDomains = $DB->query("
SELECT 
dom.id as domainID, dom.name as domainName, dom.domain as url, dom.gmt, dom.opening_hours, 
COUNT(t1.id) as chats, 
COUNT(t2.id) as opened_chats, 
COUNT(t3.id) as closed_chats

FROM domains dom

LEFT OUTER JOIN chat t1 ON t1.domain=dom.domain
LEFT OUTER JOIN chat t2 ON t2.domain=dom.domain AND t2.status=1
LEFT OUTER JOIN chat t3 ON t3.domain=dom.domain AND t3.status=3

WHERE dom.account_id = ".$userInfo['account_id']." GROUP BY dom.domain") or die (mysqli_error($DB));

在聊天栏中我有 6 个聊天(3 个打开,3 个关闭)。

而不是:

  • 所有聊天:6
  • 打开的聊天:3
  • 已关闭的聊天:3

结果是:

  • 所有聊天:54
  • 打开的聊天:54
  • 已关闭的聊天:54

有人可以帮助我吗?我不明白问题出在哪里......

非常感谢!

最佳答案

尝试下面的查询插入LEFT OUTER JOIN

$getDomains = $DB->query("
    SELECT 
    dom.id as domainID, dom.name as domainName, dom.domain as url, dom.gmt, dom.opening_hours, 
    (select count(t1.id) from chat as t1 where t1.domain=dom.domain) as chats,
    (select count(t2.id) from chat as t1 where t2.domain=dom.domain AND t2.status=1) as opened_chats,
    (select count(t3.id) from chat as t1 where t3.domain=dom.domain AND t3.status=3) as closed_chats

    FROM domains dom

    WHERE dom.account_id = ".$userInfo['account_id']." GROUP BY dom.domain") or die (mysqli_error($DB));

关于php - 使用 LEFT JOIN 计算行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45141814/

相关文章:

php - 在方法调用之前调用函数

php - 格式异常 : Unexpected end of input (at character 1)

mysql - 在 MySQL 中将 UTC 格式的日期时间转换为 GMT+7

mysql - SQL Server 与 MySQL - 经典 ASP 中的 SQL 注入(inject)漏洞

mysql - 选择由两个字段(开始 - 结束)指定的数字范围不与任何其他行中指定的范围重叠的行

php - Sql 查询绑定(bind)变量与指定变量

javascript - jQuery 不会覆盖来自 php include 的文本

php - 如何在编辑表单中填充组合框

mysql - 如何在MySQL集群中使用选项Arbitration=WaitExternal?

mysql - 从 Windows 客户机(dbforge 查询生成器)访问主机中的 mysql 数据库(mamp)