mysql计数加入

use*_*101 0 mysql sql join count

SELECT A.id as ActivityId, A.description, T.id, T.title, COUNT(R.*) as reactionCount
FROM activities 
LEFT JOIN activitiesReactions as R ON R.activityId = A.id
LEFT JOIN activitiesTags as T ON A.tagId = T.id
Run Code Online (Sandbox Code Playgroud)

所以基本上我需要一个能够获得所有活动的查询,同时得不到该活动的反应但得到COUNT的反应,这些反应可以在另一个名为activitiesReactions的表中找到,我该怎么做(参见上面的查询我想到的).

所以查询应该返回:

array('activityId' => 3, 'description' => 'doing work', 'reactionCount' => 2)
Run Code Online (Sandbox Code Playgroud)

一个示例行:

Activities table:
id | description
 3   doing work
 4   checking mail

ActivitiesReactions table:
id | activityId | message
 1            3   you never do anywork, so that must be bullshit.
 2            3   yes I do alot of work!
Run Code Online (Sandbox Code Playgroud)

所以现在它应该在我执行查询并执行WHERE A.id = 3时在reactionCount上返回"2"


SELECT A.id as ActivityId, A.description, COUNT(R.activityId) AS reactionCount
FROM activities 
LEFT JOIN activitiesReactions as R
ON R.activityId = A.id
GROUP BY A.id
Run Code Online (Sandbox Code Playgroud)

这确实有效,但是reactionCount返回为*2,因此例如如果有3个反应,则reactionCount = 6,2个反应,reactionCount = 4等.

a'r*_*a'r 5

您的查询只需要一个group by子句来使其工作,例如.

SELECT A.id as ActivityId, A.description, COUNT(R.*) 
FROM activities 
    LEFT JOIN activitiesReactions as R ON R.activityId = A.id
GROUP BY A.id, A.description;
Run Code Online (Sandbox Code Playgroud)

  • 在MySQL中你不需要组中的`A.description`.你只需要:`GROUP BY A.id` (2认同)