我正在试图找出实现这一目标的最佳方法,我非常感谢任何意见。
我的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
解释
我知道这很复杂,这就是为什么我要为它找出最佳解决方案。
谢谢,
更新
所以在我尝试了不同的方法后,我相信我想出的最佳方法如下:
备注
如果您有任何想法或参考资料可能会有所帮助,我将非常感谢。
答案 0 :(得分:2)
我不知道这是不是你要找的东西,但是很多左边的连接会很长。
select t1.ID , t1.Username , count(t2.ID) + count(t3.ID) + count(t4.ID) as Invited
from table1 t1
left join table1 t2 On t1.ID = t2.Invited_by
left join table1 t3 On t2.ID = t3.Invited_by
left join table1 t4 On t3.ID = t4.Invited_by
group by t1.ID
输出:
ID USERNAME INVITED
1 A 5
2 B 4
3 C 0
4 D 2
5 E 1
6 F 0
如果您关注深度朋友列表,请检查此函数过程以循环抛出它们。 get a recursive parent list
<强> EDIT2:强>
对于我的想法是一个很好的aproche,当然如果你想做的话,它取决于你。
不是插入之前由人邀请的ID,而是可以连接之前由人邀请的所有人。像那样
(1, 'A', NULL),
(2, 'B', 'A'),
(3, 'C', 'A,B'),
(4, 'D', 'A,B'),
(5, 'E', 'A,B,D'),
(6, 'F', 'A,B,D,E')
每当您插入受邀人员时,请使用新的人员邀请将其与之前的值相关联。你已经把它们圈起来了。你不需要使用很多查询,只需要一个。