我有一張表,我希望根據id
和upline_id
(父id)字段重新獲取所有行。這已經在PostgreSQL中這樣做了:MySQL中的RECURSIVE查詢類似於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 /未知深度)數據?
有在MySQL沒有遞歸,但每一個遞歸可使用在存儲過程中的循環被改寫。從'level = 0'開始,將基本查詢插入/選擇到臨時表中。然後ins/sel遞歸部分加入臨時表'AND level = 0'。檢查活動計數是否大於0,如果是,請增加'等級'並重復。 – dnoeth