【问题标题】:query finding non associated records based on a user查询查找基于用户的非关联记录
【发布时间】:2015-08-06 18:54:44
【问题描述】:

对于友谊中的 user_id,friend_id 将是“其他”用户,我想选择所有尚不存在友谊的用户。

我正在使用 Ruby on Rails,我尝试使用 rails 语法在一个查询中编写此代码,但遇到困难,我选择了一个原始 SQL,这正是我所需要的,但它没有返回任何结果。

 SELECT u.id, u.name, u.avatar_url FROM users u LEFT JOIN friendships f on f.friend_id=u.id WHERE f.friend_id IS NULL AND f.user_id = ? ORDER BY u.updated_at DESC LIMIT 50

【问题讨论】:

  • 试试User.includes(:friendships).where(friendships: { id: nil })

标签: mysql ruby-on-rails


【解决方案1】:
SELECT u.id, u.name, u.avatar_url
FROM users u
LEFT JOIN friendships f on f.friend_id = u.id
WHERE f.friend_id IS NULL
ORDER BY u.updated_at DESC
LIMIT 50

摆脱AND f.user_id = ?。上面的查询将查找所有没有朋友的用户,我不确定额外的AND 的目的是什么,但似乎你没有得到任何结果。

【讨论】:

    【解决方案2】:

    所以我已经很好地处理了所有键上的表索引,但我宁愿使用 rails 方式而不是纯 SQL。

    User.find_by_sql(["SELECT id, avatar_url, name FROM users WHERE id NOT IN (SELECT user_id FROM friendships WHERE friend_id=?) ORDER BY updated_at DESC LIMIT 9", session[:ytuserid]]).to_a
    

    当前用户现在可以看到 9 个不存在友谊的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      相关资源
      最近更新 更多