Php Mysql计数连接字段

Php Mysql计数连接字段,php,mysql,sql,join,count,Php,Mysql,Sql,Join,Count,我有3个表:账户、评论和关注者 在帐户中,我跟踪用户信息,在评论中跟踪他们的评论,在追随者中跟踪谁。我想创建一个查询,在那里我可以获得帐户的基本信息、评论数和追随者数。我有一个查询,但不工作: SELECT a.company, a.firstname, a.lastname, a.title, a.email, a.zipcode, a.created, a.newsletter, COUNT(c.id)

我有3个表:账户、评论和关注者

在帐户中,我跟踪用户信息,在评论中跟踪他们的评论,在追随者中跟踪谁。我想创建一个查询,在那里我可以获得帐户的基本信息、评论数和追随者数。我有一个查询,但不工作:

SELECT 
    a.company, 
    a.firstname, 
    a.lastname, 
    a.title, 
    a.email, 
    a.zipcode, 
    a.created, 
    a.newsletter, 
    COUNT(c.id) comments, 
    COUNT(f.id) follows, 
    a.linkedinid 
FROM accounts a 
LEFT JOIN comments c ON a.id = c.user_id 
LEFT JOIN followers f ON a.id = f.user_id
知道我做错了什么吗

试试这个

SELECT 
    a.company, 
    a.firstname, 
    a.lastname, 
    a.title, 
    a.email, 
    a.zipcode, 
    a.created, 
    a.newsletter, 
    COUNT(c.id) comments, 
    COUNT(f.id) follows, 
    a.linkedinid 
FROM accounts a 
LEFT JOIN comments c ON a.id = c.user_id 
LEFT JOIN followers f ON a.id = f.user_id 
GROUP BY f.user_id

我认为有两个问题

首先,您没有GROUPBY子句,因此它将返回所有内容的计数(返回一行),而不是每个帐户一行的计数。帐户详细信息将来自未定义的行

第二,你只需要数(c.id)/数(f.id)。如果一个帐户有多个追随者和多个评论,那么它将获得这些追随者和帐户的每一个组合,因此计数将应用于组合的数量。例如,2条评论和3个关注者会给出6个组合,两个计数都是6

通过添加一个GROUP by并将DISTINCT添加到计数中来修复这些问题,可以得到:-

SELECT 
    a.company, 
    a.firstname, 
    a.lastname, 
    a.title, 
    a.email, 
    a.zipcode, 
    a.created, 
    a.newsletter, 
    COUNT(DISTINCT c.id) comments, 
    COUNT(DISTINCT f.id) follows, 
    a.linkedinid 
FROM accounts a 
LEFT JOIN comments c ON a.id = c.user_id 
LEFT JOIN followers f ON a.id = f.user_id
GROUP BY a.company, 
    a.firstname, 
    a.lastname, 
    a.title, 
    a.email, 
    a.zipcode, 
    a.created, 
    a.newsletter, 
    a.linkedinid

注意,在MySQL中,不需要按所有非聚合字段分组,只要其他字段依赖于GROUPBY中的字段。但是,如果您对我这样做,大多数其他类型的SQL都会失败。最好的做法是在使用聚合函数时将它们全部放在GROUP BY中。

missing
GROUP BY
。我应该按什么进行分组?a、 id?是,此外,将
a.id
作为选择的一部分。