繁体   English   中英

如何查询ActiveModel记录的子集?

[英]How do I query on a subset of ActiveModel records?

我已经重写了这个问题,因为我先前的解释引起了混乱。

在SQL世界中,您具有要对其应用查询的初始记录集 该查询的输出是结果集 通常, 初始记录集是整个记录表, 结果集是来自初始记录集的与查询规则集匹配的记录

我有一个用例,需要我的应用程序偶尔仅对表中的记录子集进行操作。 如果表中有10,000条记录,我希望我的应用程序的行为就像仅存在前1,000条记录一样。 每次应具有相同的1,000条记录。 换句话说,我希望初始记录集是表中的前1,000个设备(按主键排序时),而结果集则来自这前1,000个设备的结果记录。

已经提出了一些解决方案,并且发现我的最初描述不是很清楚。 更明确地说,我不是要实现分页。 我也没有试图限制我收到的结果的数量( .limit(1,000)的确可以实现)。

谢谢!

这是您不明白的问题:

尽管这两个调用都引起问题,因为限制限制了查询的结果,而不是查询所依据的数据库行。

这不是Rails的事情,这是SQL的事情。

Device.limit(n)运行SELECT * FROM device LIMIT n

限制始终返回查询结果集的子集。

first(n)完成你想要的吗? 它将对结果集按PK升序排序,并限制返回的结果数。

SQL语句可以链接在一起。 因此,如果有子集,则可以对其执行附加查询。

my_subset = Device.where(family: "Phone")
# SQL: SELECT * FROM Device WHERE `family` = "Phone"

my_results = my_subset.where(style: "Touchscreen")
# SQL: SELECT * FROM Device WHERE `family` = "Phone" AND `style` = "Touchscreen"

也可以写成:

my_results = Device.where(family: "Phone").where(style: "Touchscreen")
my_results = Device.where(family: "Phone", style: "Touchscreen")
# SQL: SELECT * FROM Device WHERE `family` = "Phone" AND `style` = "Touchscreen"

从您的问题开始,如果您想选择前1,000行(按主键pkey排序),然后对其进行查询,则需要执行以下操作:

my_results = Device.find_by_sql("SELECT * 
                           FROM (SELECT * FROM devices ORDER BY pkey ASC LIMIT 1000) 
                           WHERE `more_searching` = 'happens here'")

您可以专门要求一组ID:

Device.where(id: (1..4).to_a)

这将构造一个WHERE子句,例如:

WHERE id IN (1,2,3,4)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM