我想从我的parent_id
对应的数据库记录中提取,如下所示:
function getChildren($id, $parent_id) {
$q = $this->db->select('id, name, slug, plat');
$q = $this->db->from('games');
$q = $this->db->where('parent_id',$id);
$q = $this->db->or_where('id',$parent_id);
$q = $this->db->get();
return $q->result_array();
}
它 - 如果是儿童游戏 - 获取parent_id
并搜索具有此类id
的游戏以及与此parent_id
相同的其他游戏。如果它是父游戏,它只会查找parent_id
与id
相同的游戏。
问题是......它并不总是有效。我在db中有四个游戏:
id | parent_id | title
15 | 0 | Abe
19 | 15 | Abe
20 | 0 | RE2
21 | 20 | RE2 DS
前两个作品,最后两个作品 - 仅限儿童(id = 21
)显示父作品。
答案 0 :(得分:1)
您可能无法使用关系数据库执行此操作。 RDBMS不用于管理任何形式的树。
你可以在一些简单的情况下,比如一级层次结构,但是一旦它变得更复杂,它就会变得更加混乱和混乱。
保持你的结构,你必须每个级别一个JOIN ,这意味着提前了解深度。
在数据库中存储树的解决方案称为嵌套树,它基本上存储每行的间隔,但是自己实现起来有点复杂。
看看Wikipedia explanation。然而,有一些库允许您以编程方式抽象这样的操作。
答案 1 :(得分:1)
使用此查询
select
*
from games as g
where parent_id = 0
union all
select
l.*
from games r
left join (select * from games) as l on r.id = t.id
where
r.parent_id != 0