我有一个标准的分层表ID / PID,如果某个子属于某个ID,我需要找到(布尔值)。有没有办法在mysql中执行此操作?
ID PID
------------
1 0 <- root
... ...
... ...
... ...
7 1
... ...
16 1
... ...
4 0
... ...
22 16
25 16
有没有办法知道子节点22是否属于节点1?我问,因为我想实现一些删除过程,其中节点1是我的回收。所有删除属于1将永久删除,所有其他删除将替换PID,因此暂时属于1。
非常感谢,
答案 0 :(得分:1)
基于Hierarchical queries in MySQL:
SET @x := 22;
SET @y := 0;
select 'yes' as x_comes_from_y
from dual
where @y in
(
SELECT @id :=
(
SELECT pid
FROM h
WHERE id = @id
) AS nodes
FROM (
SELECT @id := @x
) vars
STRAIGHT_JOIN
h
WHERE @id IS NOT NULL
);
答案 1 :(得分:0)
再次感谢这个优雅的解决方案。我简化了一点,因为我不需要STRAIGHT_JOIN
SET @x := 52;
SET @y := 41;
select 'yes' as x_comes_from_y
from dual
where @y in
(
SELECT @id :=
(
SELECT pid
FROM cat
WHERE id = @id
)
FROM
cat
WHERE @id IS NOT NULL
);
PS。当使用获取对象的完整路径时,有一点缺点,结果总是返回最后一行NULL但是这可以通过另一个SELECT来避免。