我無法圍繞一個小的(希望的)MySQL問題包裹我的頭。我有一個叫做鏈接的表格。它包含一個customer_id字段和一個linked_id字段,並且基本上將customer_id引導到彼此的客戶賬戶。新創建的帳戶可以自行生成帳戶,我希望看到由登錄用戶創建的所有帳戶+由子帳戶創建的所有帳戶。MySQL從同一個表中獲得鏈接的結果
表看起來是這樣的:
+----+-------------+-----------+
| id | customer_id | linked_id |
+----+-------------+-----------+
| 1 | 1 | 5 |
| 2 | 1 | 2 |
| 3 | 1 | 11 |
| 4 | 1 | 13 |
| 5 | 13 | 14 |
| 6 | 3 | 4 |
| 7 | 7 | 8 |
+----+-------------+-----------+
所以,如果我的身份登錄與CUSTOMER_ID 1用戶然後我想與linked_id 5,2,11,13得到用戶列表(因爲它們是直接連接)和linked_id 14(因爲該用戶是由直接連接到1的用戶創建的)。
該查詢需要是子查詢才能獲取所有用戶詳細信息。我目前有:
SELECT username, firstname, lastname, email, active, level FROM customers WHERE id
IN (SELECT linked_id FROM links WHERE customer_id=1) or id=1;
這顯然只直接返回直接連接和id = 1的用戶。
你只希望看到「孩子」和「孫子女」嗎?還是所有的後代,無論深度如何? – eggyal
無論深度如何,我都希望所有的後代,所以如果用戶使用ID 14創建新的孩子,這些也應該列在'主'ID下,然後1 – lleto
然後你需要MySQL來遍歷你現有的數據模型,這是遞歸地稱爲「*鄰接列表*」;但是,與其他一些RDBMS不同,MySQL不支持遞歸函數。如果可能的話,你可能會考慮重塑使用不同的數據結構,如「*嵌套集*」或「*傳遞閉包*」。 – eggyal