从连接表中筛选出第一个结果的属性

时间:2017-04-30 01:34:23

标签: ruby-on-rails postgresql activerecord

我有两个表userstask_listsusers has_many task_lists

task_lists属于users,其属性为tasks_counter

用户

| ID |

task_lists

| ID | USER_ID | tasks_counter |

我想找到第一个(MIN(id))userstasks_list的所有tasks_counter< 5。

我如何在PostGreSQL中实现这一目标?我正在使用Rails,如果有人知道使用ActiveRecords的解决方案。

1 个答案:

答案 0 :(得分:1)

这会将users_ids变量设置为Array,其中包含UserTaskListtasks_counter的所有user_ids = TaskList.select("MIN(id) AS id, user_id, tasks_counter") .group(:user_id) # Get first TaskList for each user .select { |t| t.tasks_counter < 5 } # Keep users tha meet criteria .pluck(:user_id) # Return users' id in array 个ID 5:

ActiveRecord_Relation

如果您希望获得包含User个对象的User对象,则可以使用上一个查询中的结果并过滤users = User.where(id: user_ids)

users = User.where(id: TaskList.select("MIN(id) AS id, user_id, tasks_counter")
                               .group(:user_id)
                               .select { |t| t.tasks_counter < 5 }
                               .pluck(:user_id))

或者,一行中的所有内容:

def parse(self, response):
    for content in response.css('a[data-name=uf)]'):
        yield {
            'text': content.css('span.filter_label::text').extract(),
        }