2011-12-16 75 views
1

我有兩個數據庫表:如何列出未完成任務的組和計數?

tasks: 
task_id (unique id, autoincrement) 
group_id (from the next table: groups, where task belongs to) 
task_name 
status (if task has been completed or not) 

groups: 
group_id (unique id, autoincrement) 
group_name 

我的目標是列出所有組,在他們未完成任務數(任務狀態0)一起。 我實現,通過這個查詢:

$sql_query = "SELECT g.id, g.name, count(g.id) as count 
FROM task_groups g, tasks t 
WHERE g.status = 0 AND t.group = g.id AND t.status = 0 
GROUP BY g.id 
ORDER BY g.id ASC"; 

而我得到的結果是這樣的:

 
Group1 3 uncompleted 
Group2 13 uncompleted 
Group3 30 uncompleted 

但空任務組(沒有屬於特定組的任何任務)沒有被列出。

結果應該是這樣的:

 
Group1 3 uncompleted 
Group2 13 uncompleted 
Group3 30 uncompleted 
Group4 0 uncompleted 
Group5 0 uncompleted 

我怎樣才能做到這一點?

回答

2

你在正確的軌道上。 GROUP BY組,但而不是計算組ID,儘量不要做的是不完整的,像這樣的任務SUM:如果要列出所有任務

SELECT g.id, g.name, 
SUM(IF(t.status = 0, 1, 0)) incomplete_tasks 
FROM task_groups g 
LEFT JOIN tasks t ON (t.group_id = g.id) 
GROUP BY g.id ASC 
HAVING incomplete_tasks > 0; 

略去HAVING條款。

注:我沒有看到g.status目的在您的查詢,並status沒有列爲groups表中的列,所以我已經離開它從我的例子。

+0

這就是所需的解決方案。順便說一下g.status在這裏沒有關係,所以你沒有理由忽略它。 – Spec 2011-12-16 23:52:22