那麼,據我所知,你有兩種選擇,都是衆所周知的。
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重複的問題(我不能把它作爲複製)
其他一些答案:
您應該在發佈之前重新閱讀論壇規則,查找已提出的問題。
希望它有幫助。