2013-01-24 55 views
1

我有一个任务表,其中0123'列和parent_id列为每个任务。
我试图建立一个查询,返回每个task_id,这个id显示在父id列的次数。
我尝试此查询:从同一表中选择计数

SELECT 
    task_id, parent_id, 
    (SELECT COUNT(*) 
     FROM `tasks` 
     WHERE parent_id = task_id) AS count_parents 
FROM tasks 

这个查询没有工作。我希望这个问题很清楚。

+1

你的错误信息是什么?我怀疑你需要添加一个GROUP BY子句,但我不确定。 – Melanie

回答

1

好像你想要这个:

SELECT task_id, 
    parent_id, 
    COUNT(parent_id) AS count_parents 
FROM tasks 
GROUP BY task_id, parent_id 
1
SELECT t2.task_id, t2.parent_id, 
    (SELECT COUNT(*) FROM `tasks` t1 
     WHERE t1.parent_id = t2.task_id) AS count_parents 
FROM tasks t2 

我想从你的问题

1

试试这个:

select task_id,parent_id, count(parent_id) as count_parents 
from `tasks` 
group by task_id,parent_id; 

在这种情况下,你的,希望需要一组它有助于。

4

如果要包括所有任务,无论他们是永远的父母或不是,

select tasks.task_id,count(parent.parent_id) 
from tasks 
left join tasks parent on tasks.task_id=parent.parent_id 
group by tasks.task_id; 

如果你想只有那些家长的任务,实在是小巫见大巫:

select parent_id,count(*) 
from tasks 
group by parent_id; 

(后者可能需要where parent_id is not null等,这取决于你如何表示没有父母的任务)。