我有两个表users
和task_lists
,users
has_many task_lists
。
task_lists
属于users
,其属性为tasks_counter
。
用户
| ID |
task_lists
| ID | USER_ID | tasks_counter |
我想找到第一个(MIN(id))users
有tasks_list
的所有tasks_counter
< 5。
我如何在PostGreSQL中实现这一目标?我正在使用Rails,如果有人知道使用ActiveRecords的解决方案。
答案 0 :(得分:1)
这会将users_ids
变量设置为Array
,其中包含User
个TaskList
个tasks_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(),
}