2011-11-28 53 views
0
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 

所以基本上我需要一個查詢,將得到所有的活動,並在同一時間無法獲得該活動的反應,但得到的反應,這是在所謂的activitiesReactions另一個表中找到的計數,我該如何做到這一點(請參閱上述查詢,我​​想到了)。MySQL的計數加入

所以查詢應該返回:

array('activityId' => 3, 'description' => 'doing work', 'reactionCount' => 2) 

一個例子行:

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! 

所以現在它應該返回, 「2」 reactionCount當我執行查詢並做WHERE A.id = 3


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 

這確實奏效,但reactionCount返回爲* 2,例如,如果有3個反應,reactionCount = 6,2個反應的reactionCount = 4等。

+0

您的示例沒有任何意義......你怎麼來了'2'作爲結果?另外,你的數組與你顯示的行不匹配 – knittl

+0

哈哈你說得對,現在已經修復了 – user1066101

回答

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; 
+2

你不需要MySQL中的'A.description'。你只需要:'GROUP BY A.id' –

2

如果要計算每個活動反應的數量,你必須按activity.id加入兩個表後:

SELECT A.id as ActivityId, A.description, COUNT(*) AS reactionCount 
FROM activities 
LEFT JOIN activitiesReactions as R 
ON R.activityId = A.id 
GROUP BY A.id 
+0

Oke the reactionCount應該只是COUNT(R. *),這給了我一個錯誤,是不可能的?問題是我還是左邊加入其他桌子。 (修正我的例子) – user1066101

+1

使用:'COUNT(R.activityId)' –

+0

奧克工作,但由於某種原因計數是2 *實際計數,任何線索?所以如果有2個反應,那麼reactionCount = 4,如果有3個反應,那麼reactionCount = 6 – user1066101