【发布时间】:2013-04-26 10:07:07
【问题描述】:
我正在尝试从以下 Action 表中检索一个表:
列:ID、Name、Status、Product_ID、User_ID 和其他几个与此问题无关的列。
每次用户想要产品时,我都会创建这样的记录: Name = Want,Status = True,Product_ID = 所需产品的 ID,User_ID 是用户的 ID。
然后,每当用户不想要产品时,我都会创建如下记录: Name = Want,Status = False,Product_ID = 不需要的产品 ID,User_ID 是用户的 ID。
我这样做是因为我的表中有其他操作的名称。
现在我想检索所有想要的产品,所以我应该检索按按 created_at 降序排序的特定用户的 product_id 分组的所有最后想要的操作,然后只检索 status = true 的操作。
因此,为了获得按 product_id 为用户分组的所有最后想要的操作,我这样做了:
Action.select("DISTINCT ON (product_id) product_id,created_at, status, * ").where{(user_id == id) & (name == 'want')}.group("product_id, id, status").order(' product_id,created_at DESC')
检索每个产品和用户的最后操作,但同时检索真假状态 唯一的问题是我不知道如何过滤此表以仅在其为真时才获取操作。
我试着这样做:
Action.select("DISTINCT ON (product_id) product_id,created_at, status, * ").where{(user_id == id) & (name == 'want')}.group("product_id, id, status").having("status = 'true'").order(' product_id,created_at DESC')
但这会给我最后一个想要=真的动作。如果最后一个动作是 status = false,它将在 status = true 时检索之前的那个。
这是我想要的想法,但我不知道如何使用 rails 来实现: http://sqlfiddle.com/#!9/e4117/3
【问题讨论】:
标签: ruby-on-rails-3 postgresql squeel