如何查找查询结果的大小
我在rails中有以下查询:
records = Record.select('y_id, source') .where(:source => source, :y_id => y_id) .group(:y_id, :source) .having('count(*) = 1')
如果我puts records
我会得到以下输出:
[#, #]
这看起来像输出数组中有2个元素。 但是当我尝试做records.size
我得到:
{[10000009, "XYZ"]=>1, [10000070, "XYZ"]=>1}
当records是一个包含2个元素的数组时,为什么
records.size
不会打印2
? 由于某种原因group by
查询结果group by
行为是否有所不同?我该怎么做才能获得
records
的大小
我可能走错了路,但我认为这个问题与.size
工作方式有关。
大小将自动尝试确定是否调用.count
或.length
。 这些行为如下:
- .count执行SQL COUNT
- .length计算结果数组的长度
然而,在occassion .size
将返回一个哈希(因为它决定使用.count
)
所以你的解决方案可能是使用.length
,它将返回一个整数。
你可以使用它:
results.length
size方法使用sql count方法,它以这种方式运行。
我刚刚在上面的例子中尝试了一个变体(使用我自己现有的Rails应用程序和数据库),它没有问题:
records = Site.select('name','url') .where(:name => 'Washington Post', :url => 'https://www.washingtonpost.com/') .group(:name, :url) .having('count(*) = 1') => #]> records.size => 1
您确定您的Record模型是否inheritance自ActiveRecord::Base
?