【问题标题】:Double Count Select return wrong result双重计数选择返回错误的结果
【发布时间】:2015-10-13 06:33:59
【问题描述】:

您好,我正在使用以下查询来显示 id 与第一个表中的数字相同的行数,我还有 2 个表。如果我只留下一个计数,一切都可以正常工作,但使用双重计数选择我会得到相同的结果,这是错误的:

'SELECT c.*, count(s.userID) as count_consulta, count(a.userID) as count_asesoria
   FROM users as c 
   LEFT JOIN consulta AS s ON s.userID = c.userID 
   LEFT JOIN asesoria AS a ON a.userID = c.userID
   GROUP BY c.userID DESC'

我得到了这个:

count_consulta = 15
count_asesoria = 15

应该在哪里

count_consulta = 3
count_asesoria = 5

欢迎任何帮助。谢谢!

【问题讨论】:

  • 您能找到count(distinct s.userID)count(distinct a.userID) 吗?如果id 在一个表中出现多次(也许你有多个字段的复合主键来打破多对多关系),除非你特别要求值与众不同。
  • 这样我在两者上都得到了结果 1
  • 那我不知道你为什么期待35?听起来这两个表包含 15 条记录,所有记录都链接到 1 个唯一的 id。您能否详细说明35 的来源?...
  • 表咨询 - 有 3 行,表 asesoria 有 5 行,其中包含 userID = 64。所以从主表用户中,我选择用户 ID 64,然后选择咨询和 asesoria 中的所有行,其中用户 ID = 64
  • 顺便说一下,我已经更改了consulta和asesoria列的ID名称,结果仍然错误。

标签: php mysql sql


【解决方案1】:

有了“欢迎任何帮助”的声明,我把它扔出去看看它是否符合你的意思。

$sql="select *,
    ( select count( distinct s.`userID` ) from `consulta` ) as 'count_consulta',
    ( select count( distinct a.`userID` ) from `asesoria` ) as 'count_asesoria'
    from `users` c
        left outer join `consulta` s on s.`userID`=c.`userID`
        left outer join `asesoria` a on a.`userID`=c.`userID`
    group by c.`userID` desc;";

【讨论】:

  • 致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在第 2 行的“select count distinct s.userID from consulta as count_consulta, select co”附近使用
猜你喜欢
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多