- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
注意:我可以使用 MySQL 或 python
编辑:为了让我的问题按照用户建议的 MRE:strawberry,我创建了我的表(创建、删除的表并不是真正必要的,所以我只使用了所有相同的日期):
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
是被邀请的用户。 inviter_id
是邀请新用户的用户。
因此,如果您是第一个邀请而没有事先邀请,inviter_id
将不会包含在 invitee_id
中。
为此我已经做到了
select
*
from user_invitations
where
inviter_id in
(select invitee_id
from user_invitations)
在此之后,我将拥有 inviter_id
作为邀请人,并获得事先邀请。
我的问题是如何获得有事先邀请的邀请人(由谁也有事先邀请)等等...
我直接在 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;
来回检查。例如,如果 inviter_id=17349 是第一个邀请而没有事先邀请,则它不会出现在第二个查询中。然后从 inviter_id=17349 的第一个查询结果中,我得到 invitee_id = 17401、17403 等。然后我现在将它们作为 inviter_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))
最佳答案
这里有一个简单的方法,你可以在 python 中使用动态编程解决方案:
previous_invites = { r["invitee"]: 0 for r in rows }
changed = True
while changed:
changed = False
for r in rows:
update_prev_invites = max(previous_invites[r["invitee"]], previous_invites.get(r["inviter"], 0) + 1)
if update_prev_invites > previous_invites[r["invitee"]]:
changed = True
previous_invites[r["invitee"]] = update_prev_invites
for r in rows:
print "User " + str(r["id"]) + " had a chain of " + str(previous_invites[r["invitee"]]) + " inviter(s) behind them"
这假设 rows
是包含数据库中数据的字典数组。它通过将被邀请者的 previous_invites
值设置为它的邀请者 + 1。这个循环一直运行,直到字典收敛到正确的答案。
n
个用户,m
是最长邀请者链的长度,此解决方案在 O(n) 空间和 O(n*m) 时间中运行。
关于python - 在邀请人和被邀请人的列中如何找到具有 1、2、3 个先前邀请的邀请?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58126434/
我正在 csv 上使用 hadoop 来分析一些数据。我使用sql/mysql(不确定)来分析数据,现在陷入了僵局。 我花了好几个小时在谷歌上搜索,却没有找到任何相关的东西。我需要一个查询,在该查询中
我正在为 Bootstrap 网格布局的“简单”任务而苦苦挣扎。我希望在大视口(viewport)上有 4 列,然后在中型设备上有 2 列,最后在较小的设备上只有 1 列。 当我测试我的代码片段时,似
对于这个令人困惑的标题,我深表歉意,我想不出这个问题的正确措辞。相反,我只会给你背景信息和目标: 这是在一个表中,一个人可能有也可能没有多行数据,这些行可能包含相同的 activity_id 值,也可
具有 3 列的数据库表 - A int , B int , C int 我的问题是: 如何使用 Sequelize 结果找到 A > B + C const countTasks = await Ta
我在通过以下功能编写此查询时遇到问题: 首先按第 2 列 DESC 排序,然后从“不同的第 1 列”中选择 只有 Column1 是 DISTINCT 此查询没有帮助,因为它首先从第 1 列中进行选择
使用 Bootstrap 非常有趣和有帮助,目前我在创建以下需求时遇到问题。 “使用 bootstrap 在桌面上有 4 列,在平板电脑上有 2 列,在移动设备上有 1 列”谁能告诉我正确的结构 最佳
我是 R 新手,正在问一个非常基本的问题。当然,我在尝试从所提供的示例中获取指导的同时做了功课here和 here ,但无法在我的案例中实现这个想法,即可能是由于我的问题中的比较维度更大。 我的实
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个 df , delta1 delta2 0 -1 2 0 -1 0 0 0 我想知道如何分配 delt
您好,我想知道是否可以执行以下操作。显然,我已经尝试在 phpMyAdmin 中运行它,但出现错误。也许还有另一种方式来编写此查询。 SELECT * FROM eat_eat_restaurants
我有 2 个列表(标题和数据值)。我想要将数据值列 1 匹配并替换为头文件列 1,以获得与 dataValue 列 1 和标题值列 2 匹配的值 头文件 TotalLoad,M0001001 Hois
我有两个不同长度的文件,file2 是一个很大的引用文件,我从中提取文件 1 的数据。 我有一行 awk,我通常会对其进行调整以在我的文件中进行查找和替换,但它总是在同一列中进行查找和替换。 所以对于
假设我有两个表,如下所示。 create table contract( c_ID number(1) primary key, c_name varchar2(50) not
我有一个带有 varchar 列的 H2 表,其检查约束定义如下: CONSTRAINT my_constraint CHECK (varchar_field <> '') 以下插入语句失败,但当我删
这是最少量的代码,可以清楚地说明我的问题: One Two Three 前 2 个 div 应该是 2 个左列。第三个应该占据页面的其余部分。最后,我将添加选项来隐藏和
在 Azure 中的 Log Analytics 中,我为 VM Heartbeat 选择一个预定义查询,我在编辑器中运行查询正常,但当我去创建警报时,我不断收到警报“查询未返回 TimeGenera
在 Azure 中的 Log Analytics 中,我为 VM Heartbeat 选择一个预定义查询,我在编辑器中运行查询正常,但当我去创建警报时,我不断收到警报“查询未返回 TimeGenera
今天我开始使用 JexcelApi 并遇到了这个:当您尝试从特定位置获取元素时,不是像您通常期望的那样使用sheet.getCell(row,col),而是使用sheet.getCell(col,ro
我有一个包含 28 列的数据库。第一列是代码,第二列是名称,其余是值。 public void displayData() { con.Open(); MySqlDataAdapter
我很沮丧:每当我缩小这个网页时,一切都变得一团糟。我如何将网页居中,以便我可以缩小并且元素不会被错误定位。 (它应该是 2 列,但所有内容都合并为 1)我试过 但由于某种原因,这不起作用。 www.o
我是一名优秀的程序员,十分优秀!