2

我想从同一张表Ticket中获取三种类型的门票。像这样rails方式从同一张表获取不同类型的记录

Ticket.where(type: 'a').limit(5) 
Ticket.where(type: 'b').limit(5) 
Ticket.where(type: 'c').limit(5) 

什么是最好的方式来获取数据相当于上述三个查询与最小数据库命中。

+0

我想要15条记录,包括每个类型“a”,“b”和“c”的5条记录。 – 2015-02-23 11:53:47

回答

1

我认为你需要使用SQL UNION查询。你可以看到这个答案: ActiveRecord Query Union

或者使用rails的总和来做所有的事情。这不是优雅的解决方案,但你可以尝试:

scope :by_type, ->(type){ where(type: type).limit(5) } 

def self.foo 
    Ticket.by_type('a') + Ticket.by_type('b') + Ticket.by_type('c') 
end 
2

您可以使用IN

types = [a,b,c] 

Ticket.where("type IN (?)", types).limit(5) 
+0

它会给我们5条记录,但我们需要每种类型5条记录。总共有15个。 – 2015-02-23 11:09:03

+0

@AdnanAli有趣的。完全错过了这一点。将继续保持这一点。 – Pavan 2015-02-23 11:19:17