我想要选择孩子的类别和数量。
类别的结构:
Id Parent Name
0 0 main
1 0 Games
2 0 Books
3 2 Drama
4 2 Comedy
对于id'0',它应返回游戏0,书籍2.对于id'2',它应该返回戏剧0,喜剧0
怎么做?
答案 0 :(得分:4)
Id Parent Name
1 0 main
2 1 Games
3 1 Books
4 3 Drama
5 3 Comedy
如果您添加' 0'您可以使用简单查询执行主行的值。 Main是Book and Games的父母,因此我们不得不使用Main的其他一些值。
所以在那之后你需要写一个简单的查询
Select c1.name, (select count(id) from category c2 where c2.parent = c1.id)
as count from category c1 where c1.parent=1;
谢谢。
答案 1 :(得分:0)
使用内部联接来获取数据:
SELECT c.Name, c.Parent
FROM Category c
INNER JOIN Category p on c.id = p.parent
答案 2 :(得分:0)
这将返回预期结果:
SELECT t1.parent, t1.name, COUNT(t2.id)
FROM vt AS t1 LEFT JOIN vt AS t2 ON t2.parent =t1.id
WHERE t1.parent <> t1.id
GROUP BY t1.parent, t1.name
但是如果有其他级别的嵌套类别,则需要某种递归查询,然后语法取决于您的DBMS。
修改强>
我不知道您的实际规则如何计算这些类别,但是当知道(和小)层次数时,可以使用多个左连接处理层次结构。
SELECT t1.parent, t1.name, COUNT(COALESCE(t2.id,t3.id,t4.id))
FROM vt AS t1 LEFT JOIN vt AS t2
ON t2.parent =t1.id
LEFT JOIN vt AS t3
ON t3.parent =t2.id
LEFT JOIN vt AS t4
ON t4.parent =t3.id
WHERE t1.parent <> t1.id
GROUP BY t1.parent, t1.name