Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:计算子代并获取父行_Php_Mysql_Count_Group By - Fatal编程技术网

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