2012-09-20 111 views
0

我想從對應於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不打算管理任何形式的樹。

可以在一些簡單的情況下,像一級層次結構,但只要它變得越來越複雜,它變得越來越混亂。

保持你的結構,你必須使ONE JOIN每級,這意味着要事先知道深度。

存儲樹木數據庫中的解決方案被稱爲嵌套的樹狀結構,它基本上存儲間隔在每行,但它是一個有點複雜,自己執行。

看看Wikipedia explanation。然而,有庫允許你以編程方式抽象這樣的操作。

0

只是發表我的問題後,我嘗試另一種解決方案。好笑的是,我坐在這一個多小時,浪費你的時間後,我想出瞭解決方案;)

不管怎麼說,那就是:

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->or_where('parent_id',$parent_id); 
    $q = $this->db->where('id !=', $id); 
    $q = $this->db->get(); 

    return $q->result_array(); 
} 
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