我有一个类别结构如下
我想选择叶子节点。我指的是没有子类别的类别。
在我的数据库监视器中,将回答cpu,小说和漫画。
任何帮助将不胜感激。
编辑: 我试过这个。
public function get_valid_categories($parent)
{
$has_childs = false;
foreach($this->categories as $key => $value) {
if ($value['parent'] == $parent) {
if ($has_childs === false) {
$has_childs = true;
}
else
{
$this->valid_categories[] = $value['name'];
}
$this->get_valid_categories($key);
}
}
if ($has_childs === true)
{
return $this->valid_categories ;
}
}
我正在调用此函数,如下所示
get_valid_categories(0);
答案 0 :(得分:3)
您不需要递归查询。以下SQL如何:
select t1.*
from table t1
left join table t2 on t1.id = t2.parent_id
where t2.id is null
这会获取表中的行和自连接以获取每一行的子项。然后,它会通过检查t2.id is null
来过滤掉那些没有子项的行。
答案 1 :(得分:2)
嗯,可能有很多可能的解决方案,但这是第一个出现在我脑海中的解决方案:
SELECT *
FROM categories
WHERE id NOT IN (
SELECT DISTINCT(parent_id) FROM categories
)
不如使用连接那么优雅,但可以作为问题的替代解决方案。 希望有所帮助。