簡體   English   中英

在一個查詢中獲取所有推薦的用戶?

[英]Get all referred users in a single query?

是否有可能獲得可能鏈接到UserID1的所有用戶?

例如:

UserID1引用了UserID2和UserID5

UserID2引用了UserID3

UserID3引用了UserID4

UserID1頁面上的結果:

  • + UserID2
  • + UserID5
  • ++ UserID3
  • +++ UserID4

我目前是怎么做的:

$user_data['id']=1;
$primary_referral_query=mysqli_query($conn, "SELECT username FROM users WHERE referrer=$user_data[id]");
while($primary_referral=mysqli_fetch_array($primary_referral_query))
{
    echo '+'.$primary_referral['username'].'<br>';
}
$secondary_referral_query=mysqli_query($conn, "SELECT a.username, b.username, c.username AS users_c_username FROM users AS a, users AS b, users AS c WHERE b.referrer = a.id AND a.id <> b.id AND c.referrer = b.id AND a.id=$user_data[id]");
while($secondary_referral=mysqli_fetch_array($secondary_referral_query))
{
    echo '++'.$secondary_referral['users_c_username'].'<br>';
}

存儲分層數據的方法稱為鄰接列表(模型)。

你有不同的選擇:

1)從數據庫中讀取所有數據,將其放入php數組並遞歸遍歷

示例: https//stackoverflow.com/a/15307555/1948627

2)僅選擇當前用戶和后代,將其放入php數組並遞歸遍歷

SQL應如下所示:

SELECT u1.username as lev1, u2.username as lev2, u3.username AS  as lev3, u4.username AS as lev4
FROM users AS u1
LEFT JOIN users AS u2 ON u2.referrer = u1.id
LEFT JOIN users AS u3 ON u3.referrer = u2.id
LEFT JOIN users AS u4 ON u4.referrer = u3.id
WHERE u1.id = 1;

我沒有找到php代碼的示例,但它應該更難,因為您收到的數據現在是多余的。 另請注意:對於樹中的每個新深度,您必須在數據庫選擇中添加一個JOIN。

3)遞歸PHP / MySQL

示例: https//stackoverflow.com/a/10994181/1948627

如果您沒有太多數據,我會選擇選項1。 或者更好地選擇另一種存儲或檢索數據的方式。

我最喜歡的方式是關閉表

關於嵌套集的另一個有趣的意見: https//stackoverflow.com/a/31642680/1948627

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM