0


我对 MySQL 查询有点困惑:

我有表用户

用户 ID|语言|名称
1 |zh |迈克
2 |zh |约翰
3 |zh |杰西
4 |de |沃尔夫冈(我)

和表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 的用户。

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

4

2 回答 2

3

在这里,试一试:

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

于 2013-10-13T13:27:12.527 回答
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)
                 )
于 2013-10-13T13:27:32.527 回答