我的表结构:
--------------------------
|Categories |
--------------------------
|id |parent_id|title |
--------------------------
|1 |null |t1 |
--------------------------
|2 |1 |t2 |
--------------------------
|3 |1 |t3 |
--------------------------
|4 |2 |t4 |
--------------------------
|5 |4 |t5 |
--------------------------
|6 |null |t6 |
--------------------------
我需要找出给定项目/类别与其根项目/类别(包括指定项目和根项目)之间有多少项目。
例如,在此表中 title=t5
的计数为 4 (t1
->t2
->t4
->t5
).
MySQL版本:5.6.21
最佳答案
如果你的 mysql 版本支持 cte
你可以尝试使用 CTE Recursion 来实现。
架构(MySQL v8.0)
CREATE TABLE Categories(
id INT,
parent_id INT,
title VARCHAR(50)
);
INSERT INTO Categories VALUES (1,null,'t1');
INSERT INTO Categories VALUES (2,1 ,'t2');
INSERT INTO Categories VALUES (3,1 ,'t3');
INSERT INTO Categories VALUES (4,2 ,'t4');
INSERT INTO Categories VALUES (5,4 ,'t5');
INSERT INTO Categories VALUES (6,null,'t6');
查询#1
WITH RECURSIVE cte1 AS (
SELECT id,parent_id,title
FROM Categories
where title = 't5'
UNION ALL
SELECT cte1.id,c.parent_id,c.title
FROM cte1 INNER JOIN Categories c
on c.id = cte1.parent_id
)
SELECT id,GROUP_CONCAT(title separator '->') result
FROM cte1
GROUP BY id;
| id | result |
| --- | -------------- |
| 5 | t5->t4->t2->t1 |
关于mysql - 如何在mysql中获取最后一个子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52002385/