我正在触发此查询
p "my query starts here..."
@relevant_customers_for_total_spent = Customer.order("total_amount DESC").where('id IN (?)',@customers_ids).limit(relevant_customers_count_for_total_spent)
p " ------- "
p relevant_customers_count_for_total_spent # output is: 1139
p @relevant_customers_for_total_spent.count # output is: 2888
p " ------- "
更多日志表示实际的查询是:
SELECT COUNT(*) FROM `customers` WHERE (id IN (2,3,4,5,6,75,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,75,296,297,298,2889)) LIMIT 1139
所以问题是:
* 更新-1 *
我得到了第二个问题:
@relevant_customers_for_total_spent.length
是计算元素数量的正确方法。
更新 - 2
我有一些类似于[2,3,4,5,6,75,56,57,58,59,60,61,62]的客户ID。我在Customer模型中有一个属性,即total_amount。我想按照total_amount(DESC)的顺序重新安装所有客户ID。我有另一个因素指定限制,即我需要从该列表中有多少客户。有些事情就像它的5.所以我需要来自该araay的前五名客户,基于total_amount。
答案 0 :(得分:4)
重点是:ARel非常聪明,可以在没有count
子句的情况下生成order
个查询。
想一想:#count
关系返回select count(*) ...
SQL查询,反过来又返回一个数字 - 为什么你需要在这里订购任何东西?
难怪#length
返回正确的数字。这是因为正在调用#length
的关系对象,不知道如何响应调用,触发自身从DB返回结果,DB通常是数组的实例,然后将调用委托给它。因此,在数组实例上调用#length
会返回预期的元素数。
<强>更新强>
ids = [1,2,3,4,5]
Customer.where(id: ids).order('total_amount DESC').limit(5)