我不確定這是否可以完成,我有一個用戶表與用戶活動的相關表連接在一個外鍵上。活動具有不同的類型,例如評論,等等。我需要讓用戶根據每種不同類型的活動進行過濾。在左側選擇多個計數在同一個表上加入
我到目前爲止是這樣的:
SELECT
users.*,
COUNT(t1.id) AS comments,
COUNT(t2.id) AS likes
FROM users
LEFT JOIN activity AS t1 ON users.id = t1.user_id
LEFT JOIN activity AS t2 ON users.id = t2.user_id
WHERE t1.activity_type_id = 1 AND t2.activity_type_id = 2
GROUP BY users.id
HAVING comments >= 5 AND likes >= 5
這似乎是接近,但它的返回與5個都喜歡和評論的計數的用戶,而實際上用戶有5個喜歡和1條評論。
要清楚我想要這個查詢返回誰有5個或更多的喜歡和誰擁有 5個或更多的評論也的用戶。
UPDATE:
我創建了一個SQL小提琴。在這種情況下我有3個用戶:
- 用戶1:6條的評論,8個喜歡
- 用戶2:3條的評論,2喜歡
- 用戶3:5條的評論,2喜歡
我希望查詢只返回用戶1和用戶3,他們各自的喜歡和評論總數。
http://sqlfiddle.com/#!2/dcc63/4
假設我的編輯(上述斜體)是正確的,將 '或' 無法滿足這一要求?你也是外連接表,從中你不選擇列,所以這可能是問題的一部分。考慮提供一個sqlfiddle和期望的結果。 – Strawberry 2015-02-11 08:29:11
我需要這個能夠使用AND以及OR條件。我現在的主要問題是用戶的活動數量不正確。每種類型都返回相同的數量。 – Jason 2015-02-11 08:36:32
刪除GROUP BY和HAVING,並查看您在結果數據集中獲得的記錄......應該提供一些有關爲何無法以此方式工作的信息。 – CBroe 2015-02-11 09:04:24