Codeigniter - 从db中选择孩子和父母

时间:2012-09-20 09:27:45

标签: php codeigniter

我想从我的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_idid相同的游戏。

问题是......它并不总是有效。我在db中有四个游戏:

id  |  parent_id  |  title
15  |  0          |  Abe
19  |  15         |  Abe
20  |  0          |  RE2
21  |  20         |  RE2 DS

前两个作品,最后两个作品 - 仅限儿童(id = 21)显示父作品。

2 个答案:

答案 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