2017-06-05 7 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はまだ再帰のネイティブサポートを持っていないため、これは少し口当たりになります。したがって、代替モデルの人気が高まります。ネストされたは8.0 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 | 
+-------------+-----+-----+ 

を設定recursive CTE syntaxためのサポートが追加されます。

+0

@BillKarwin - ああ、今、私は新しいものを満載していなければなりません! – Strawberry