ati*_*shb 7 postgresql activerecord ruby-on-rails
我有两个型号User和Post,其中一个
:user has_many :posts
如何查找超过n帖子的用户列表?
我正在寻找一个简单的声明,where而不是使用范围.
该where查询不允许像聚集函数里面算,解决这个问题的理想方法是使用having方法.
User.joins(:posts).group('users.id').having('COUNT(*) >= ?', n)
Run Code Online (Sandbox Code Playgroud)
这将映射到
SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id" GROUP BY users.id HAVING COUNT(*) >= n
Run Code Online (Sandbox Code Playgroud)
通过在Post Model中使用计数器缓存并将计数保持为用户表上的posts_count列,可以更方便地使用另一种方法.
belongs_to :user, counter_cache:true
User.where('posts_count > ?', n)
Run Code Online (Sandbox Code Playgroud)
但我更喜欢第一种方法,因为它不涉及任何数据库更改,而且非常简单
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |