Php Mysql SUM查询未返回预期结果

Php Mysql SUM查询未返回预期结果,php,mysql,sql,Php,Mysql,Sql,您好,我寻求帮助以了解我的查询有什么问题,该查询没有返回表consulta中的行数(number),其中userIDC等于表users中的userID。对于表asesoria中的userIDC,执行相同的操作 SELECT c.*, SUM(IF(a.userIDA = c.userID , 1, 0)) AS count_asesoria, SUM(IF(s.userIDC = c.userID , 1, 0)) AS count_consulta FROM users as c

您好,我寻求帮助以了解我的查询有什么问题,该查询没有返回表consulta中的行数(number),其中userIDC等于表users中的userID。对于表asesoria中的userIDC,执行相同的操作

SELECT c.*, SUM(IF(a.userIDA = c.userID , 1, 0)) AS count_asesoria, SUM(IF(s.userIDC = c.userID , 1, 0)) AS count_consulta
   FROM users as c 
   LEFT JOIN consulta AS s ON s.userIDC = c.userID 
   LEFT JOIN asesoria AS a ON a.userIDA = c.userID
   GROUP BY c.userID DESC 
现在它为
count\u asesoria
count\u consulta

表格用户:

userID | Data    |
------------------
3      | content |
咨询表

userIDC | Data   |
------------------
3      | content |
3      | content |

因此count_consulta必须返回
2

问题最可能的原因是联接中表之间的笛卡尔积。正确的解决方案是在查询之前预先聚合结果。或者,使用相关子查询。在这种情况下,这可能是最简单的方法,并且可能具有最佳性能:

SELECT u.*,
       (SELECT COUNT(*)
        FROM consulta c
        WHERE c.userIDC = u.userId
       ) as count_consulta, 
       (SELECT COUNT(*)
        FROM asesoria a
        WHERE a.userIDA = u.userId
       ) as count_asesoria
FROM users u;

为了获得最佳性能,您需要在
consulta(userIDA)
asesoria(userIDA)
上建立索引。问题最可能的原因是联接中的表之间存在笛卡尔积。正确的解决方案是在查询之前预先聚合结果。或者,使用相关子查询。在这种情况下,这可能是最简单的方法,并且可能具有最佳性能:

SELECT u.*,
       (SELECT COUNT(*)
        FROM consulta c
        WHERE c.userIDC = u.userId
       ) as count_consulta, 
       (SELECT COUNT(*)
        FROM asesoria a
        WHERE a.userIDA = u.userId
       ) as count_asesoria
FROM users u;

为了获得最佳性能,您需要在
consulta(userIDA)
asesoria(userIDA)

上建立索引。您可以显示一些示例数据和您希望从查询中得到的结果吗?您可以显示一些示例数据和您希望从查询中得到的结果吗?