iT邦幫忙

0

SQL尋找上級

  • 分享至 

  • xImage

各位高手好,小弟目前有個需求是需要尋找該會員的所有上級代理,
之前有嘗試過使用member_id 跟proxy_id之間的關係做遞迴(WITH AS)
結果卡在線上SQL版本是5.7不支援.......
請問有沒有其他單純用SQL的解決方案呢? 如果沒有我只好把有關係的資料都撈出來跑迴圈了

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
一級屠豬士
iT邦大師 1 級 ‧ 2023-03-09 22:52:55
最佳解答
jasonb122 iT邦新手 5 級 ‧ 2023-03-09 23:23:08 檢舉

這騷操作... 等我先拜完再調整看看/images/emoticon/emoticon07.gif

1
JamesDoge
iT邦高手 1 級 ‧ 2023-03-10 08:42:58

方法一:使用MySQL遞迴函數(僅支援MySQL 8.0及以上版本)

如果您使用的MySQL版本是8.0或以上,您可以使用MySQL的遞迴函數來查詢該會員的所有上級代理。以下是一個示例查詢:

WITH RECURSIVE cte (member_id, proxy_id) AS (
  SELECT member_id, proxy_id FROM proxies WHERE member_id = {member_id}
  UNION ALL
  SELECT c.member_id, p.proxy_id FROM cte c JOIN proxies p ON c.proxy_id = p.member_id
)
SELECT * FROM cte;

在此查詢中,我們使用了一個遞迴公共表達式(CTE)來查詢代理關係,這個CTE使用了遞迴的方式來查詢該會員的所有上級代理。

方法二:使用SQL JOIN(適用於所有版本)

如果您的MySQL版本不支援遞迴函數,您可以使用SQL JOIN來查詢該會員的所有上級代理。以下是一個示例查詢:

SELECT p1.member_id AS level_1, p2.member_id AS level_2, p3.member_id AS level_3, ..., pn.member_id AS level_n
FROM proxies p1
LEFT JOIN proxies p2 ON p2.proxy_id = p1.member_id
LEFT JOIN proxies p3 ON p3.proxy_id = p2.member_id
...
LEFT JOIN proxies pn ON pn.proxy_id = p{n-1}.member_id
WHERE p1.member_id = {member_id};

在此查詢中,我們使用了n個LEFT JOIN來查詢該會員的所有上級代理。根據您的代理關係深度,您需要添加相應數量的LEFT JOIN。

我要發表回答

立即登入回答