获取子查询并计为列

时间:2014-02-14 15:24:03

标签: mysql count subquery

我有一个带有简单版本控制系统的博客系统。我的DB是:

|id------|parent_id|title------------------|
|1       |1        |Test title             |
|2       |1        |Test title 2           |
|3       |1        |Last test title        |
|4       |4        |Another blog item      |

我的查询只获得最新版本(只有3和4):

SELECT * FROM 
(SELECT * FROM blogs ORDER BY id DESC) b
GROUP BY b.parent_id

结果:

  • 最后一个测试题目
  • 另一个博客项目

我的问题是:是否可以计算所有子版本的数量?,例如:

  • 最后一个测试题目(3)
  • 另一篇博客项目(1)

1 个答案:

答案 0 :(得分:1)

您的查询无法保证正常工作。您可以通过扩展here阅读有关MySQL组的信息。基本上,*生成的字段不能保证来自“第一”记录。我想要强调的是,这记录不起作用,即使它可能在实践中有效。

编写查询的另一种方法是:

select b.*, p.numchildren
from (select parent_id, max(id) as maxid, count(*) as numchildren
      from blogs
      group by parent_id
     ) p join
     blogs b
     on b.id = p.maxid
order by b.parent_id