Php MySQL计数子元素
我有一个分类表:Php MySQL计数子元素,php,mysql,adjacency-list,Php,Mysql,Adjacency List,我有一个分类表: id | name | parent_id 1 | Camaro | 0 2 | Chevelle | 0 3 | Sale - Camaro Parts | 1 4 | Bestselling Parts | 1 我的第一个请求如下: 'SELECT * FROM `categories` WHERE parent_id = :parent_id'; 在获取结果集之后,我进行子查询以检查行是否有子元素: foreach($res
id | name | parent_id
1 | Camaro | 0
2 | Chevelle | 0
3 | Sale - Camaro Parts | 1
4 | Bestselling Parts | 1
我的第一个请求如下:
'SELECT
*
FROM
`categories`
WHERE
parent_id = :parent_id';
在获取结果集之后,我进行子查询以检查行是否有子元素:
foreach($result as $r) {
$r->hasChild = count(ORM::forTable('categories')->where('parent_id', $r->id)->findArray());
$data[] = $r;
}
是否有任何方法可以避免在foreach循环中多次连接到DB,并在第一次查询中获取数据
谢谢 您可以在parent_id和id上对表进行自联接。根据您是否希望类别包含子类别,您可以进行左联接或内部联接。这里也提到了类似的问题-
这并不可怕,只要您只希望所选行下面的子行数。如果需要整个层次结构,则需要使用更好的RDMS 这里解决方案的主要部分是自连接同一个表。然后,我们可以使用
count()
aggregate函数查看每个项附加了多少子项
选择
类别.id
,categories.name
,categories.parent\u id
,计数(chld.id)
从…起
类别
左连接类别chld
关于categories.id=chld.parent\u id
哪里
父\u id=:父\u id
分组
类别.id
,categories.name
,categories.parent\u id
从
categories`中选择count(*),其中parent\u id=:parent\u id`感谢但如何左键连接呢?可能是重复的