我对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的用户。
我正在构建一个语言合作伙伴搜索,它会从结果中排除所有被阻止的用户(双向)。
答案 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)
答案 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)
)