MySQL - 从结果中排除所有被阻止的用户

时间:2013-10-13 13:15:36

标签: mysql sql


我对MySQL查询有点困惑:

我有表用户

user_id|language|name
1      |en      |Mike
2      |en      |John
3      |en      |Jesse
4      |de      |Wolfgang (Me)

和表 users_blocked

user_id|blocked_user_id
1      |4
4      |1
1      |3
3      |1
4      |2

(其中 user_id 已阻止 blocked_user_id

我想找到所有使用英语(en)的用户(不包括我自己),我没有阻止他们,他们没有阻止我。 它应该只返回上面例子中ID为3的用户。

我正在构建一个语言合作伙伴搜索,它会从结果中排除所有被阻止的用户(双向)。

2 个答案:

答案 0 :(得分:2)

在这里,给它一个去:

select * from users where user_id <> 4 and language = 'en'
    and user_id not in(select blocked_user_id from users_blocked where user_id = 4)
    and user_id not in(select user_id from users_blocked where blocked_user_id = 4)

在这里演示:http://sqlfiddle.com/#!2/b22a4/2

答案 1 :(得分:1)

SELECT users.user_id, users.language, users.name
FROM users
WHERE users.language = 'EN'
  AND NOT EXISTS(SELECT * 
                 FROM users_blocked
                 WHERE (users_blocked.user_id = 4
                        AND users_blocked.blocked = users.user_id)
                   OR (users_blocked.blocked = 4
                        AND users_blocked.user_id = users.user_id)
                 )