Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
Mysql 好办法数数孩子?_Mysql_Database_Database Design - Fatal编程技术网

Mysql 好办法数数孩子?

Mysql 好办法数数孩子?,mysql,database,database-design,Mysql,Database,Database Design,我有两个具有父子关系的表: 以id为索引的父表 id | name ---------------- 1 | Bob 2 | Mike 3 | Joe id | parent | name ------------------------- 1 | 1 | Ronald 2 | 2 | Sammy 3 | 3 | Jenny 4 | 1 | Tara

我有两个具有父子关系的表:

id
为索引的父表

    id  | name
----------------
    1   | Bob
    2   | Mike
    3   | Joe
   id   | parent | name
-------------------------
    1   | 1      | Ronald
    2   | 2      | Sammy
    3   | 3      | Jenny
    4   | 1      | Tara
    5   | 3      | Jack
子项
id
为索引的表

    id  | name
----------------
    1   | Bob
    2   | Mike
    3   | Joe
   id   | parent | name
-------------------------
    1   | 1      | Ronald
    2   | 2      | Sammy
    3   | 3      | Jenny
    4   | 1      | Tara
    5   | 3      | Jack
在我的网站上,我想显示所有家长的列表,以及他们孩子的数量,如下所示:

    id  | name | Children Count
-------------------------------
    1   | Bob  |      2
    2   | Mike |      1
    3   | Joe  |      2
这样做的有效方法是什么?请注意,这里我表示了我的数据结构的一个类似简化版本,在我的实际情况中,我在我的
父表
中有大约10000条记录,每个
父表
大约有
10-200个
子表


如果您建议将
计数
列添加到
父表
中,您是否知道当我在
子表
中进行更改时,
计数
将由
MYSQL
自动更新的方法?

似乎可以这样做

SELECT p.id,
       p.name,
       COUNT(c.id) AS children_count
FROM parent p
LEFT JOIN children c ON p.id = c.parent
GROUP BY p.id
select p.id, p.name, c.cnt
from parent p
inner join (select parent, count(id) cnt 
            from children
            group by parent) c on p.id = c.parent

看来这可能行得通

select p.id, p.name, c.cnt
from parent p
inner join (select parent, count(id) cnt 
            from children
            group by parent) c on p.id = c.parent
查询:

查询:


你能证明为什么这比添加另一列更好吗?性能会成为一个问题吗?我没说它更好。添加另一列有助于查询,但会使写入复杂化。在子表中的父表上添加索引和性能不会成为问题,至少在您拥有数百万行之前不会。您能证明为什么这比添加另一列更好吗?性能会成为一个问题吗?我没说它更好。添加另一列有助于查询,但会使写入复杂化。在子表中的父表上添加索引和性能不会成为问题,至少在您拥有数百万行之前不会。您能证明为什么这比添加另一列更好吗?性能会成为一个问题吗?你能证明为什么这比添加另一列更好吗?性能是否会成为一个问题?