注意:我正在使用MySQL或python
编辑:为了按照用户建议使我的问题MRE:草莓,我创建了我的表(创建,删除表并不真正需要,所以我只是使用了所有相同的日期):
CREATE table invites (
ID INT AUTO_INCREMENT,
invitee_id INT,
inviter_id INT,
inviter_user_code VARCHAR(20),
created_at datetime,
updated_at datetime,
PRIMARY KEY (ID)
);
INSERT INTO invites (invitee_id, inviter_id, inviter_user_code, created_at,updated_at)
VALUES
(17365, 17374, 'BDMX5Z', '2019-02-01', '2019-02-01'),
(17401, 17349, 'BDMX58', '2019-02-01', '2019-02-01'),
(17403, 17349, 'BDMX58', '2019-02-01', '2019-02-01'),
(17452, 17349, 'BDMX8C', '2019-02-01', '2019-02-01'),
(17457, 17449, 'BDMX8J', '2019-02-01', '2019-02-01');
要清楚这是我的数据帧的样子:
id invitee_id inviter_id inviter_user_code created_at updated_at
1 17375 17374 BDMX5Z 2019-02-01 10:28:44 2019-02-01 10:28:44
2 17401 17349 BDMX58 2019-02-01 11:59:47 2019-02-01 11:59:47
3 17403 17349 BDMX58 2019-02-01 12:03:22 2019-02-01 12:03:22
4 17452 17449 BDMX8C 2019-02-01 13:39:31 2019-02-01 13:39:31
5 17457 17455 BDMX8J 2019-02-01 14:00:25 2019-02-01 14:00:25
6 17502 17501 BDMX9Y 2019-02-01 15:50:44 2019-02-01 15:50:44
7 17541 17540 BDMXB7 2019-02-01 17:15:06 2019-02-01 17:15:06
8 17542 17546 BDMXBD 2019-02-01 17:34:48 2019-02-01 17:34:48
9 17696 17630 BDMXDZ 2019-02-02 11:46:14 2019-02-02 11:46:14
10 17706 13191 BDMT3A 2019-02-02 12:23:47 2019-02-02 12:23:47
invitee_id
是被邀请的用户.
2001年12月31日终了的两年期收入和支出及准备金和基金结余变动报表
inviter_id
是用户邀请新用户的。
因此,如果首先邀请没有事先邀请inviter_id
将不包含在invitee_id
中.
为此我做了
select
*
from user_invitations
where
inviter_id in
(select invitee_id
from user_invitations)
在此之后,我将使用inviter_id
作为以前邀请的调用符.
我的问题是如何使用先前邀请(也有先前邀请的人)调用服务器等...
2001年12月31日终了的两年期收入和支出及准备金和基金结余变动报表
我在mysql中直接尝试了多种方法,并创建了df并使用它.
在结果表上执行上述查询,如:
With one_prior as (
select
*
from user_invitations
where
inviter_id in
(select invitee_id
from user_invitations)
)
select *
from one_prior
where
inviter_id in
(select invitee_id
from one_prior);
我手动检查了一个用户,但是如果有办法检查所有用户,似乎是对的?
我创建了两个查询:
select *
from user_invitations
where inviter_id = 17349;
select *
from user_invitations
where invitee_id = 23764;
然后往后检查。 例如,如果inveriter_id = 17349首先邀请而没有事先邀请它将不会出现在第二个查询中.然后从使用invirter_id = 17349的第一个查询结果我得到tribeee_id = 17401,17403等.然后我现在将它们作为invirter_id进入第一个查询.重复步骤.
此外,有没有办法创建一个分布式点图,其中每个点代表用户,并且有一条连接具有“调用/邀请”关系的用户的线路?
编辑: 说我正在做的第五个链接,代码似乎很长而且繁琐,我希望找到更有效的方法.
query = """
With five_prior as
(
With four_prior as
(
With three_prior as
(
With two_prior as
(
With one_prior as
(
select
*
from user_invitations
where inviter_id in
(select invitee_id
from user_invitations)
)
select *
from one_prior
where inviter_id in
(select invitee_id
from one_prior)
)
select *
from two_prior
where inviter_id in
(select invitee_id
from two_prior)
)
select *
from three_prior
where inviter_id in
(select invitee_id
from three_prior)
)
select *
from four_prior
where inviter_id in
(select invitee_id
from four_prior)
)
select *
from five_prior
where inviter_id in
(select invitee_id
from five_prior)
group by inviter_id
"""
df = pd.read_sql(query, con=conn)
five_link = list(df.inviter_id)
print(len(five_link))