【发布时间】:2013-07-29 03:17:58
【问题描述】:
我正在尝试找出实现这一目标的最佳方法,我非常感谢任何意见。
我的 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 次查询,直到到达该用户的邀请树底部
- 我想一旦表格达到平衡状态,逻辑就会变得容易得多。
如果您有任何想法或参考可以帮助我,我将非常感激。
【问题讨论】:
-
唯一的解决方案是通过存储过程或在您的应用程序中运行多个查询(取决于最大“朋友深度”)。
-
如果F邀请G,E也得一分? G邀请H,E加分?
-
这是MySQL中递归的问题。因此,这是一个常见问题解答。
-
@Vatev 感谢您的回答,知道什么是最好的方法吗?我用一些想法更新了我的问题,让我知道你的想法
-
@Zelldon 是的,这就是我要找的东西