2 2 -> 1 1 ->-6ren">
gpt4 book ai didi

mysql - 在 SQL 中的任一方向计数 "Friends"

转载 作者:行者123 更新时间:2023-11-29 06:54:59 25 4
gpt4 key购买 nike

我有一个模型,人们可以在其中互相“加好友”(友谊)。在不计算双向友谊两次的情况下,我如何查询一个人既是 friend 又是 friend 的人数?

这是一个例子:

1 -> 2
2 -> 1
1 -> 3
4 -> 1

我希望它注册为 #1 有 3 个 friend

友情(id、person_id、friend_id)

最佳答案

Select
count(distinct(f.user_id + f.friend_id))
From
Friends f
Where
f.user_id = 1 or f.friend_id = 1

不过,这样做可能更有效:

Select
Count(*)
From (
Select friend_id From Friends f Where f.user_id = 1
Union
Select user_id From Friends f where f.friend_id = 1
) as a

为了获取每个人的 friend 数,假设还有一个用户表:

Select
u.user_id,
count(distinct f.user_id + f.friend_id)
From
Users u
Left Outer Join
Friends f
On u.user_id = f.user_id Or u.user_id = f.friend_id

尽管使用 or 连接通常意味着查询速度很慢。另一种方式是:

Select
u.user_id,
count(distinct f.friend_id)
From
Users u
Left Outer Join (
Select user_id, friend_id from Friends
Union All
Select friend_id, user_id from Friends
) f
On u.user_id = f.user_id

您可以将 Union All 更改为 Union 并去掉 distinct,但不确定哪个更快。

关于mysql - 在 SQL 中的任一方向计数 "Friends",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13299893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com