gpt4 book ai didi

mysql - 选择用户不是特定用户的 friend

转载 作者:行者123 更新时间:2023-12-01 00:55:38 24 4
gpt4 key购买 nike

enter image description here

您好,我有这两个表:users 和 friends(friend_status = 1 表示请求已发送,friend_status = 2 表示他们是 friend )。现在我想选择所有用户都不是特定用户的 friend 。怎么办?

假设当前用户是 1。我试过这个 SQL。它有效,但它太长而且太慢。第一个选择所有向 user1 发送请求但未被接受的用户。第二个选择所有用户接收来自 user1 的请求。第三个和第四个选择所有不在“ friend ”表中的用户。

SELECT user_id, name, email
FROM
(
SELECT user_id, name, email
FROM users u INNER JOIN friends f ON u.user_id = f.sender
WHERE f.receiver = 1 AND friend_status <> 2
UNION
SELECT user_id, name, email
FROM users u INNER JOIN friends f ON u.user_id = f.receiver
WHERE f.sender = 1 AND friend_status <> 2
UNION
SELECT u.user_id, u.name, u.email
FROM users u LEFT JOIN friends f ON u.user_id = f.sender
WHERE f.receiver IS NULL
GROUP BY user_id
UNION
SELECT u.user_id, u.name, u.email
FROM users u LEFT JOIN friends f ON u.user_id = f.receiver
WHERE f.sender IS NULL
GROUP BY user_id
) T
GROUP BY user_id

更新:添加图片。 enter image description here

最佳答案

SELECT
a.user_id,
a.name,
a.email,
b.status IS NOT NULL AS friend_status
FROM
users a
LEFT JOIN
friends b ON
a.user_id IN (b.sender, b.receiver) AND
1 IN (b.sender, b.receiver)
WHERE
(b.friend_id IS NULL OR b.status <> 2) AND
a.user_id <> 1

您之前曾问过一个问题here - “选择与任何人都不是 friend 的用户”,我提供了一个 answer它利用了 LEFT JOIN .

在此基础上,要选择不是特定 用户 friend 的用户,我们只需要将该特定用户的 ID 添加到 LEFT JOIN条件(1 IN (b.sender, b.receiver)。

次要编辑:除非用户可以与他/她自己成为 friend ,否则同时选择我们要选择的用户是没有意义的!!所以我添加了 WHERE a.user_id <> 1 .

关于mysql - 选择用户不是特定用户的 friend ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11184672/

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