2017-06-05 71 views
-2

這裏是我的類別表自加入樹MYSQL

category_id | parent_id 
____________________________ 
     27 |  25 
     28 |  27 
     29 |  25 
     26 |  28 
     25 |  0 
     30 |  0 
     31 |  26 
    .......... 
    .......... 

我要顯示這樣的記錄。

category_id | parent_id 
____________________________ 
    25 |  0  
    27 |  25 
    28 |  27 
    26 |  28 
    31 |  26 
    29 |  25 
    30 |  0 

    .......... 
    .......... 

我看過很多帖子,但我找不到任何東西。 請讓我知道我的分類表的查詢。謝謝。 這裏有一些我已經看過的鏈接。 1: enter link description here 2:enter link description here

+2

我沒有得到你想要實現的。 – Janno

+2

如何獲取數據的邏輯是什麼 –

+1

'27'和'29'具有相同的'parent_id 25',爲什麼'29'在'31'之後? – Blank

回答

0
DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(category_id INT NOT NULL 
,parent_id INT NULL 
); 

INSERT INTO my_table VALUES 
(27,25), 
(28,27), 
(29,25), 
(26,28), 
(25,NULL), 
(30,NULL), 
(31,26); 

SELECT DISTINCT t1.* 
    FROM my_table t1 
    LEFT 
    JOIN my_table t2 
    ON t2.parent_id = t1.category_id 
    LEFT 
    JOIN my_table t3 
    ON t3.parent_id = t2.category_id 
    LEFT 
    JOIN my_table t4 
    ON t4.parent_id = t3.category_id 
ORDER 
    BY t4.parent_id DESC 
    , t3.parent_id DESC 
    , t2.parent_id DESC 
    , t1.parent_id DESC; 

+-------------+-----------+ 
| category_id | parent_id | 
+-------------+-----------+ 
|   25 |  NULL | 
|   27 |  25 | 
|   28 |  27 | 
|   26 |  28 | 
|   31 |  26 | 
|   29 |  25 | 
|   30 |  NULL | 
+-------------+-----------+ 

或類似的東西。由於MySQL還沒有對遞歸的原生支持,所以這變得有點含糊,因此替代模型的流行,例如, 組嵌套 ...

DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(category_id INT NOT NULL 
,lft INT NOT NULL 
,rgt INT NOT NULL 
); 

INSERT INTO my_table VALUES 
(0,1,16), 
(25,2,13), 
(27,3,10), 
(28,4,9), 
(26,5,8), 
(31,6,7), 
(29,11,12), 
(30,14,15); 

SELECT * FROM my_table ORDER BY lft; 
+-------------+-----+-----+ 
| category_id | lft | rgt | 
+-------------+-----+-----+ 
|   0 | 1 | 16 | 
|   25 | 2 | 13 | 
|   27 | 3 | 10 | 
|   28 | 4 | 9 | 
|   26 | 5 | 8 | 
|   31 | 6 | 7 | 
|   29 | 11 | 12 | 
|   30 | 14 | 15 | 
+-------------+-----+-----+ 

的MySQL 8.0將增加對recursive CTE syntax支持。

+0

@BillKarwin - 哦,現在我得去學習一些新東西! – Strawberry