【问题标题】:Mysql query to find "Not a friend"Mysql查询查找“不是朋友”
【发布时间】:2015-01-15 04:56:06
【问题描述】:

我想要一个 mysql 查询来检索不是当前用户好友的用户的记录列表以及当前用户向其他用户发送的好友请求。

这是我的users 表(id​​,用户名) 这是我的friends 表(id​​、friend_one、friend_two、状态)

status 0 表示未决请求,1 表示请求已接受。接受请求时,会触发 1 次更新和插入查询。例如 (1,4,1,0) 4 向 1 发送请求,用户 1 接受请求,现在朋友表中的条目将看起来像 (1,4,1,1) (2,1,4,1)。

用户(1,'A')

用户(2,'B')

用户(3,'C')

用户(4,'D')

用户(5,'E')

朋友表条目

朋友 (1,4,1,1)

朋友 (2,1,4,1)

朋友 (3,1,2,0)

朋友 (4,3,1,0)

预期结果

用户名id状态

B 2 0

E 5 NULL

编辑

这是我正在尝试的,但我也得到了一个记录,他向我发送了我不想要的朋友请求

SELECT u2.username, u2.id, f.status
FROM users u1
INNER JOIN users u2
ON u1.id != u2.id
LEFT OUTER JOIN friends f
ON u1.id = f.friend_one
AND u2.id = f.friend_two
WHERE u1.id = 1
AND (f.status IS NULL
OR f.status = 0)

【问题讨论】:

  • 使用 SQL 的 NOT 否定从“朋友”到“不是朋友”的条件。
  • 但我还想要当前用户向其发送好友请求的用户列表。
  • 你试过什么?似乎您只是要求我们为您编写查询。
  • 这是我的查询SELECT u2.username, u2.id, f.status FROM users u1 INNER JOIN users u2 ON u1.id != u2.id LEFT OUTER JOIN friends f ON (u1.id = f.friend_one AND u2.id = f.friend_two) OR (u1.id = f.friend_two AND u2.id = f.friend_one) WHERE u1.id = 1 AND (f.status IS NULL OR f.status = 0)
  • @Manx_Warrior 您可以编辑您的问题以添加查询并使其更具可读性。

标签: mysql


【解决方案1】:

我想我理解你的意图。这个答案应该让你接近。

select users.name, users.id, coalesce(friends.status, friends2.status) as status
from users
left join friends on friends.friend_two = 1 and friends.friend_one = users.id
left join friends friends2 on friends2.friend_two = users.id and friends2.friend_one = 1
where users.id != 1
and (friends.status is null or friends.status != 1)
and (friends2.status is null or friends2.status != 1)

【讨论】:

  • 能否为上述查询提供一个 JS fiddle
  • 输出很完美,但我还想要状态以及用户名和 ID,我该怎么做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多