56,677
社区成员
发帖
与我相关
我的任务
分享
SELECT T2.id, T2.name
FROM (
SELECT
@r AS _id,
@stop:=@stop+if(@r=2,1,@stop) as stop,
(SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := 5, @l := 0, @stop:=0) vars,
table1 h
WHERE @stop < 1) T1
JOIN table1 T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC
这两个的优缺点请说明一下,那一个性能更好(要求是取到截止id数据后不能再向上查询数据了),谢谢,我将几个贴子的分全结给你!!!SELECT T2.id, T2.name
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := 5, @l := 0) vars,
table1 h
WHERE @r <> 2
union all select @r, parent_id,@l+1 FROM table1 WHERE id = @r
) T1
JOIN table1 T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC
SELECT T2.id, T2.name
FROM (
SELECT
@r AS _id,
@stop:=@stop+if(@r=2,1,@stop) as stop,
(SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := 5, @l := 0, @stop:=0) vars,
table1 h
WHERE @stop < 1) T1
JOIN table1 T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC
SELECT ID.level, DATA.* FROM(
SELECT
@ids as _ids,
( SELECT @ids := GROUP_CONCAT(id) FROM table1 WHERE FIND_IN_SET(parent_id, @ids) ) as cids,
@l := @l+1 as level
FROM table1, (SELECT @ids :='1', @l := 0 ) b
WHERE @ids IS NOT NULL
) id, table1 DATA
WHERE FIND_IN_SET(DATA.id, ID._ids)
ORDER BY level, id;
SELECT ID.level, DATA.* FROM(
SELECT
@ids as _ids,
( SELECT @ids := GROUP_CONCAT(id) FROM table1 WHERE FIND_IN_SET(parent_id, @ids) ) as cids,
@l := @l+1 as level
FROM table1, (SELECT @ids :='1', @l := 0 ) b
) id, table1 DATA
WHERE FIND_IN_SET(DATA.id, ID._ids)
ORDER BY level, id;