我正在尝试找出实现这一目标的最佳方法,我非常感谢任何输入。
我的 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 那么我将计算 A 邀请 2,我想要实现的就是这个。
ID , Username , Invited
1 , A , 5
2 , B , 4
3 , C , 0
4 , D , 2
5 , E , 1
6 , F , 0
解释
- F没有邀请,C也一样
- E 邀请 F 所以他得 1 分
- D邀请了E所以这意味着E注册后他邀请了F所以D得到2分
- B 邀请了 C 和 D,然后 D 邀请了 2 个人,所以 B 得到 4 分
- A 邀请了 B 他邀请了 4 个所以 A 得到了 5 个人
我知道这很复杂,这就是我试图找出最佳解决方案的原因。
谢谢,
更新
因此,在我尝试了不同的方法之后,我相信我想出的最佳方法如下:
- 例如,将 1 个字段作为“total_invites”添加到用户表
- 构建一个查询来计算每个用户的邀请数量,从最新用户到老用户,因为新用户可能还没有机会邀请任何人。
- 在数据库“cronjob 或每次有限的行”上运行查询
- 一旦我到达平衡表,逻辑就会改变,而不是计算结果一旦我需要报告,每当新推荐的用户登录时,我将增加每个帐户和相关帐户的计数器。
笔记
- 即使为单个用户构建查询似乎也很复杂,我认为我必须进行 n 次查询,直到到达该用户的邀请树底部
- 我想一旦桌子达到平衡状态,逻辑就会变得容易得多。
如果您有任何想法或参考可以帮助我,我将不胜感激。