我想弄清楚什么是实现这一目标的最佳方式,我非常感谢任何输入。我的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