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