2014-02-14 27 views
-1

我查詢計數出現次數是:MySQL查詢,USER_ID

SELECT * FROM (SELECT user_id 
FROM goals 
LEFT JOIN goal_results ON goals.id = goal_results.goal_id 
WHERE goals.enabled = 1 AND validation = 'accepted') AS u 

我的結果是:

| user_id | 
| 4 | 
| 5 | 
| 4 | 
| 5 | 
| 6 | 

我需要讓他們每個人的計數,如:

4> 2

5> 2

6> 1

我已經試過許多類型的查詢與子查詢,或者使用不同的,但我迷路了,我沒有達到我的目標......

任何想法嗎?

回答

1

您可以使用GROUP BYCOUNT來實現此目的。子查詢不是必需的。

SELECT goal_results.user_id, COUNT(*) qty 
FROM goals 
LEFT JOIN goal_results ON goals.id = goal_results.goal_id 
WHERE goals.enabled = 1 AND goal_results.validation = 'accepted' 
GROUP BY goal_results.user_id 
+0

謝謝。順便說一句我已經提交和編輯,因爲你在查詢中交換了錯誤的表,但沒關係! SELECT goal_results.user_id,COUNT(*)數量 FROM目標 LEFT JOIN goal_results ON goals.id = goal_results.goal_id WHERE goals.enabled = 1 AND goal_results.validation = '接受' GROUP BY goal_results.user_id – zeflex

1

添加組將由做。

SELECT u.user_id, count(*) FROM (SELECT user_id 
FROM goals 
LEFT JOIN goal_results ON goals.id = goal_results.goal_id 
WHERE goals.enabled = 1 AND validation = 'accepted') AS u 
group by u.user_id 
+0

我不明白爲什麼這裏需要雙選select – cmorrissey

+0

我只擅長基本'sql查詢'。所以我不敢修改OP的sql。 –

1

你不需要使用子查詢做到這一點:

SELECT g.user_id, count(*) 
FROM goals g LEFT JOIN 
    goal_results gr 
    ON g.id = gr.goal_id 
WHERE g.enabled = 1 AND validation = 'accepted' 
GROUP BY g.user_id; 

我的猜測,不過,是你真正想要的:

SELECT g.user_id, count(gr.goal_id) 
FROM goals g LEFT JOIN 
    goal_results gr 
    ON g.id = gr.goal_id 
WHERE g.enabled = 1 AND validation = 'accepted' 
GROUP BY g.user_id; 

這將返回0用戶沒有目標。第一個會爲他們返回1

+0

有沒有downvote的原因? –