Php Mysql计数连接字段
我有3个表:账户、评论和关注者 在帐户中,我跟踪用户信息,在评论中跟踪他们的评论,在追随者中跟踪谁。我想创建一个查询,在那里我可以获得帐户的基本信息、评论数和追随者数。我有一个查询,但不工作: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)
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
作为选择的一部分。