递归查询(向下递归)
请看此文章mysql递归查询
反递归查询(向上递归)
网上有三种写法,我只是对三种写法做了试验而做出部分总结,如果想看原文请点击此连接
有一张表gt_catalague,有两种重要的字段GUID,父ID PARENT_ID,结构如图所示
1.第一种
SELECT
@pv AS _guid,
(SELECT @pv := PARENT_ID FROM gt_catalague WHERE GUID = _guid) as _PARENTID
FROM
gt_catalague b,
(SELECT @pv := '2c60b1d3ac99423bb53bb9f4c9982688') p
第一次执行会报错,如图所示
第二次执行不报错,但不是我们想要的结果,如图所示
2.第二种
SELECT
@r AS _guid,
(SELECT @r := PARENT_ID FROM gt_catalague WHERE GUID = _guid) AS _PARENTID,
@l := @l + 1 AS lvl
FROM
(SELECT @r := '2c60b1d3ac99423bb53bb9f4c9982688', @l := 0) m,
gt_catalague n
WHERE @r <> '0'
第一次执行会报错,如图所示
第二次执行,结果如下
3.第三种
SELECT *
FROM
gt_catalague,
(SELECT @pv := '2c60b1d3ac99423bb53bb9f4c9982688') p
WHERE
(
FIND_IN_SET(guid, @pv) > 0
AND @pv := CONCAT(@pv, ',', PARENT_ID)
)
第一次执行也无错误信息,结果是我们想要的如图
总结
MySQL数据库中没有Oracle那种递归查询语句,所以只能自己写查询语句。网上也有写MySQL函数的,与MySQL查询语句各有利弊。如果想用查询语句写递归请参考此连接递归查询,反递归请参考上面第三种方式。如有不对的地方请指正。