Php MySQL:计算子代并获取父行
我想计算属于一组父页面的项目总数,并获取父页面的行,例如Php MySQL:计算子代并获取父行,php,mysql,count,group-by,Php,Mysql,Count,Group By,我想计算属于一组父页面的项目总数,并获取父页面的行,例如 pg_id pg_title parent_id 1 A 1 2 B 2 3 C 3 4 d 1 5 e 1 6 f 2 7 g
pg_id pg_title parent_id
1 A 1
2 B 2
3 C 3
4 d 1
5 e 1
6 f 2
7 g 1
8 k 3
9 l 3
10 j 3
所以我想得到这样的结果
ParentName ParentID TotalCout
A 1 3
B 2 1
C 3 3
这是我到目前为止提出的查询,但它没有返回正确的结果,它没有得到家长的页面标题,而是返回他们的孩子的页面标题
SELECT root_pages.pg_title as ParentName,x.ParentID,x.TotalCount
FROM
(
SELECT root_pages.parent_id as ParentID, COUNT(root_pages.parent_id) as TotalCount
FROM root_pages
WHERE root_pages.parent_id != root_pages.pg_id
AND root_pages.pg_hide != '1'
GROUP BY root_pages.parent_id
)x
LEFT JOIN root_pages
ON x.ParentID = root_pages.parent_id
GROUP BY x.ParentID
你知道我怎样才能得到我需要的正确结果吗
谢谢我想你加入的领域不对。尝试加入x.parentid=root\u pages.pg\u id尝试以下操作:
SELECT a.pg_title as ParentName,
a.pg_id as ParentID,
b.TotalCout
FROM root_pages a INNER JOIN
(
SELECT parent_id, COUNT(1) as TotalCout
FROM root_pages
WHERE parent_id <> pg_id
GROUP BY parent_id
) b
ON a.pg_id = b.parent_id
AND b.TotalCout>0
如果您对没有子级的根父页面不感兴趣,请将左连接更改为内部连接
在一次选择中,给定数据属性root:=parent\u id=pg\u id
谢谢我尝试了第一个建议,它返回了一些父母,但父母认为孩子失踪了。第二个建议也是如此,而且结果中没有返回父项名称…@lauthiamkok您能确认pg_id=parent_id是父项记录的信号这一假设吗?对于第一个,如答案中所述,将“左”改为“内部联接”。@Richard:是的,我可以确认pg_id=parent_id表示父记录。我似乎从@Cybernate的建议中得到了正确的结果。我将对它进行更详细的测试。谢谢您的帮助。@lauthiamkok将HAVING添加到第二个查询中,该查询应该更快,它排除了父记录没有子记录的地方。谢谢Richard。只是尝试了一下,奇怪的是有些家长仍然不见了,有些家长的名字返回NULL。我想我误解了返回顶级家长的问题。已更新查询。现在检查一下。不等于
select p.pg_title ParentName, p.pg_id ParentID, IFNULL(c.TotalCout,0) TotalCout
from root_pages p
left join
(
select parent_id, count(*) TotalCout
from root_pages
where parent_id != pg_id
group by parent_id
) c on c.parent_id=p.pg_id
WHERE p.pg_id = p.parent_id
select max(case when pg_id=parent_id then pg_title end) ParentName,
parent_id ParentID,
count(*)-1 TotalCout
from root_pages
group by parent_id
having count(*) > 1