gpt4 book ai didi

MySQL:如何 LEFT JOIN WHERE IS NULL(user1 阻止 user2 或颠倒)?

转载 作者:搜寻专家 更新时间:2023-10-30 20:11:25 24 4
gpt4 key购买 nike

我有一个表 user,此外还有 INNER JOIN 它与表 cities 和其他一些表。现在我还有下表:

blocked_user
--------------------------------------------------------
id | user1_id | user2_id | timestamp

如何使用 LEFT JOIN WHERE IS NULL,以便从搜索结果中排除两个用户组合(user1 blocked user2 或 user2 blocked user1)?

user
--------------------------------------------------------
id | username | ...

非常感谢您的帮助!

最佳答案

我猜你有一个当前用户(正在执行请求的用户)并且你想隐藏他们阻止的所有用户或所有阻止他们的用户。我还假设 user1_id 是执行阻止的用户,user2_id 是他们阻止的用户。您应该编辑您的问题以使这些观点更清楚。

如果那是对的,这就是我会做的:

SELECT id, username

FROM user

LEFT JOIN (
SELECT DISTINCT user2_id AS blockee_id
FROM blocked_user
WHERE user1_id = :current_user_id
) this_user_blocked
ON user.id = this_user_blocked.blockee_id

LEFT JOIN (
SELECT DISTINCT user1_id AS blocker_id
FROM blocked_user
WHERE user2_id = :current_user_id
) blocked_this_user
ON user.id = blocked_this_user.blocker_id

WHERE this_user_blocked.blockee_id IS NULL
AND blocked_this_user.blocker_id IS NULL

我认为使用两个单独的 LEFT JOIN ... WHERE ... IS NULL 结构是有意义的,因为您实际上是在检查两种不同的情况。

关于MySQL:如何 LEFT JOIN WHERE IS NULL(user1 阻止 user2 或颠倒)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10997935/

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