2014-09-10 60 views
0

我試圖讓所有的孩子的父母。我有一個簡單的查詢 從部分地方sectionID = 6 數據庫結構非常簡單php mysql得到所有的父母

sectionID parent 
1  0 
2  1 
3  1 
4  2 
5  4 
6  5 

現在我想從sectionID 6得到所有家長選擇,其結果應該是一個字符串0/2/4/5/6。兒童可能沒有很多父母,它可能只有一個,所以結果應該是不同的。即 5/6 ..我希望你明白我想要做什麼。我已經嘗試過在互聯網上找到的幾個遞歸函數,但是我真的很吮吸這個,並想知道是否有人可以幫助我走上正確的軌道。 P.S我使用PHP和MySQL

回答

-1

我不會寫所有的代碼,但如果我理解正確的數據庫瑪這個想法應該工作。

section = 6 
result = "" 
while section != "" 
    select parent where sectionID = section 
    result += parent 
    section = parent 
return result 
0

那麼,據我所知,你有兩種選擇,都是衆所周知的。

1)你讓一個遞歸函數,只是你一直在努力的人。他們周圍有很多人,我不會把他放在這裏。

2)到目前爲止我最喜歡的,這是數據庫模式最現代化的ORM的使用,這就是所謂的嵌套集模型。

基本上你在表上創建了幾個欄,它看起來應該像這樣的:

CREATE TABLE nested_category (
     category_id INT AUTO_INCREMENT PRIMARY KEY, 
     name VARCHAR(20) NOT NULL, 
     lft INT NOT NULL, 
     rgt INT NOT NULL 
); 

INSERT INTO nested_category VALUES(1,'ELECTRONICS',1,20),(2,'TELEVISIONS',2,9),(3,'TUBE',3,4), 
(4,'LCD',5,6),(5,'PLASMA',7,8),(6,'PORTABLE ELECTRONICS',10,19),(7,'MP3 PLAYERS',11,14),(8,'FLASH',12,13), 
(9,'CD PLAYERS',15,16),(10,'2 WAY RADIOS',17,18); 

SELECT * FROM nested_category ORDER BY category_id; 

+-------------+----------------------+-----+-----+ 
| category_id | name     | lft | rgt | 
+-------------+----------------------+-----+-----+ 
|   1 | ELECTRONICS   | 1 | 20 | 
|   2 | TELEVISIONS   | 2 | 9 | 
|   3 | TUBE     | 3 | 4 | 
|   4 | LCD     | 5 | 6 | 
|   5 | PLASMA    | 7 | 8 | 
|   6 | PORTABLE ELECTRONICS | 10 | 19 | 
|   7 | MP3 PLAYERS   | 11 | 14 | 
|   8 | FLASH    | 12 | 13 | 
|   9 | CD PLAYERS   | 15 | 16 | 
|   10 | 2 WAY RADIOS   | 17 | 18 | 
+-------------+----------------------+-----+-----+ 

如果你注意到沒有PARENT_ID列。爲了能夠搜索它的兒童的,比方說,第5行的查詢會像:

Select * from nested_category where left > 7 and left < 8 order by left asc,這會帶來任何結果。

對於行號1的結果卻會帶來整個樹。

我有這臺電腦上autocreating這些列沒有PHP腳本,但很多周圍還有。我怕他們也是遞歸的。

你我找到大量的信息四處搜索「嵌套集模型」,喜歡模型like this one

this或理論框架exaplanations,這是一個WAY重複的問題(我不能把它作爲複製)

其他一些答案:

您應該在發佈之前重新閱讀論壇規則,查找已提出的問題。

希望它有幫助。