簡體   English   中英

PHP的MySQL得到所有父母

[英]php mysql get all parents

我正在努力讓所有孩子的父母。 我有一個簡單的查詢,從sectionID = 6的部分中選擇。數據庫結構非常簡單

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

現在,我嘗試從sectionID 6獲取所有父母,結果應該是字符串0/2/4/5/6。 孩子可能沒有很多父母,可能只有一個父母,所以結果應該有所不同。 即5/6 ..我希望您理解我正在嘗試做的事情。 我已經嘗試過在互聯網上找到的幾個遞歸函數,但是我確實對此感到很困惑,並且想知道是否有人可以幫助我走上正確的道路。 PS我正在使用PHP和MySQL

好吧,據我所知,您有兩個選擇,兩個都很有名。

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行,結果將帶入整棵樹。

我沒有用於在此計算機上自動創建這些列的php腳本,但是周圍有很多。 恐怕它們也是遞歸的。

你我發現周圍很多搜索“嵌套集模型”的信息,像這樣或模型的理論框架exaplanations 像這樣的

這是一個重復的問題(我不能將其重復)

其他一些答案:

在發布之前,您應該重新閱讀論壇規則,查找已經問過的問題。

希望能幫助到你。

我不會編寫所有代碼,但是如果我正確地理解了您的數據庫shema,那么這個想法就應該起作用。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM