我想弄清楚什麼是實現這一目標的最佳方式,我非常感謝任何輸入。我的MySQL表推薦朋友積分查詢
部分:
ID , Username , Invited_by
1 , A ,
2 , B , 1
3 , C , 2
4 , D , 2
5 , E , 4
6 , F , 5
所以我想弄清楚是誰邀請的大多數用戶來說,招的是,如果A邀請B和B邀請C,那麼我會認爲這是一種邀請2 ,我想要達到的是這個。
ID , Username , Invited
1 , A , 5
2 , B , 4
3 , C , 0
4 , D , 2
5 , E , 1
6 , F , 0
說明
- ˚F邀請任何人,同樣對C
- Ë邀請C以便他拿到1分
- d邀請Ë所以這意味着後Ë註冊,他邀請˚F所以D得到2分
- B邀請C和D,然後邀請D 2人B得4分
- 邀請B他邀請4所以A得到5人
我知道這很複雜,這就是爲什麼我試圖找出最佳的解決方案。
感謝,
UPDATE
所以之後我嘗試了不同的方法,我相信我想出的最好的辦法是:
- 添加1場給用戶表爲'total_invites'爲例
- 建立一個查詢,它將計算每個用戶的邀請數,從最新的用戶開始,直到老因爲新用戶可能沒有機會邀請任何人。
- 運行「每一次的cronjob或有限行」
- 一旦我達到一個均衡表的邏輯會發生變化,而不是計算的結果對數據庫的查詢,一旦我需要的報告,我會增加每個帳戶的計數器以及相關的賬戶,每當一個新的稱爲用戶登錄。
注意
- 即使建立單個用戶的查詢看起來很複雜,我想我必須做N次查詢,直到我到達底部Ø f該用戶的邀請樹
- 我想一旦表達到平衡狀態,邏輯將變得更容易。
請如果您有任何想法或參考,可能會幫助我會非常感激。
唯一的辦法是通過存儲過程或在您的應用程序運行幾個查詢(取決於最大「朋友深度」)。 – Vatev
如果F邀請G,E也得到一個點? G邀請H,E得到另一個點? – Zelldon
這是一個關於MySQL中遞歸的問題。因此,這是一個常見問題。 – Strawberry