查询以了解以下内容

时间:2014-03-25 23:30:37

标签: mysql ruby-on-rails-3 activerecord model

我有一个用户表和一个友谊表 用户(身份证,电子邮件,姓名) 友谊(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的用户显示

我希望问题清楚明白

抱歉英语不好

1 个答案:

答案 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填写参数并执行。