我有一个用户表和一个友谊表 用户(身份证,电子邮件,姓名) 友谊(id,user_id,friend_id,已确认)
id | email | name
1 | xyz | abc
2 | yui | poi
3 | tar | foo
4 | bar | baz
在此,如果id为1的用户向id为2的用户发送了一个朋友请求,那么友谊中的行看起来像
id | user_id | friend_id | confirmed
1(generated key) | 1 | 2 | false
现在当用户接受好友请求时
id | user_id | friend_id | confirmed
1(generated key) | 1 | 2 | true
2 | 2 | 1 | true
所以我基本上想要做的是找出与当前用户不是朋友的用户,如果用户已经是用户的朋友或者用户发送了朋友请求,则生成的散列数组不应该包含该值
因此,在上面的数据库中,hash的结果数组应该包含id为3和4的用户。
所以基本上在友谊表中 user_id是朋友请求发件人ID,朋友ID是接收者ID
因此,无论user_id是current_user,它都不应该具有与该friend_id相对应的用户,反之亦然,其中friend_id是当前用户,它不应该向具有相应user_id的用户显示
我希望问题清楚明白
抱歉英语不好
答案 0 :(得分:1)
试试这个:
select u.* from users u
where u.id not in ( select user_id id from friendship
union
select friend_id from friendship );
如果您还想要当前用户的记录,请添加具有当前用户ID的OR
子句。
select u.* from users u
where u.id = ?
OR u.id not in ( select user_id id from friendship
union
select friend_id from friendship );
使用当前用户ID填写参数并执行。