我有一个表格,我希望根据id
和upline_id
(父ID)字段重新获取所有行。这已在PostgreSQL中完成,如下所示:
WITH RECURSIVE downlines(id, number, upline_id, first_name, last_name, level) AS (
SELECT id, number, upline_id, first_name, last_name, 1
FROM mytable
WHERE id = 2061
UNION ALL
SELECT a.id, a.number, a.upline_id, a.first_name, a.last_name, d.level + 1
FROM mytable a, downlines d
WHERE a.upline_id = d.id
)
SELECT * from downlines
但是我是MySQL新手,无法弄清楚如何将上述查询转换为MySQL版本。我在MySQL找到了这个:
select *
from (select * from agents order by id) products_sorted,
(select @pv := '2061') initialisation
where find_in_set(upline_id, @pv) > 0
and @pv := concat(@pv, ',', id)
但是结果不匹配,在MySQL版本中缺少许多行。
有人能告诉我如何将上面的PostgreSQL查询转换为MySQL来获取递归/分层(n /未知深度)数据吗?
答案 0 :(得分:0)
MySQL不支持WITH RECURSIVE
。但是要解决此问题,您可以使用session variable(starting with @)
来保存查询中的值。
试试这个:
SELECT a.id, a.number, a.upline_id,
a.first_name, a.last_name,
@level:=@level+1 as `level`
FROM mytable a inner join
(
SELECT id, number, upline_id, first_name, last_name
FROM mytable WHERE id = 2061
) d on a.upline_id = d.id ,(select @level:=0) as p ;