Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails查询。订单问题_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 Rails查询。订单问题

Ruby on rails 3 Rails查询。订单问题,ruby-on-rails-3,Ruby On Rails 3,质疑从来都不是我的强项。我正在尝试修改当前查询以允许按ASC/DESC排序 为此,我有一个扩展到共享、扫描、查看、兑换(可通过Activity.type访问)的模型活动 我现在的问题是 results=Activity.select("*, count(*) as count").where(created_at: date_from..date_to).group(:user_id).having("count > 0").count("type='#{val}', count(*) #

质疑从来都不是我的强项。我正在尝试修改当前查询以允许按ASC/DESC排序

为此,我有一个扩展到共享、扫描、查看、兑换(可通过Activity.type访问)的模型活动

我现在的问题是

results=Activity.select("*, count(*) as count").where(created_at: date_from..date_to).group(:user_id).having("count > 0").count("type='#{val}', count(*) #{desc/asc}")
这让我觉得:

{2=>1, 3=>1, 1=>305, 111=>99, 110=>98, 109=>97, 108=>96, 107=>95, 106=>94, 105=>93,...
这里的问题是前2个有
(type={val}).count
=0。这意味着它们下面有活动记录,但它们的类型不同。是否仍然需要修改查询,以便这些.count=0实际遵守顺序

否则,作为一种解决方法,我可以手动将所有这些添加到数组中,然后最后对它们进行评估

已编辑:已更新到我的最新一期

您尝试过以下方法吗:

results=Activity.select("*, count(*) as count")
.where(created_at: date_from..date_to).group(:user_id, :type)
.having("count > 0").order("type ASC, count(*) DESC")
你试过这个吗:

results=Activity.select("*, count(*) as count")
.where(created_at: date_from..date_to).group(:user_id, :type)
.having("count > 0").order("type ASC, count(*) DESC")

您想先按计数,然后按类型订购?您能用想要的输出来描述您的需求吗?您想先按计数,然后按类型订购吗?您能用想要的输出来描述您的需求吗?实际上,不幸的是,这并不是完全正确的订购。当我进行count(*)DESC时,它会将具有(type=a).count=0的记录放在第一位,而不是放在后面。有没有办法解决这个问题?如果你把它倒过来,count(*)a会发生什么情况呢?很有趣,它总是把(type=a)和(count=0)放在顶部。我认为我需要的查询将花费太长的时间,并且正在将顺序简化为count(*)DESC.:)好的,它首先按类型排序,因此无论计数多少,类型A都将是第一个。如果您想先按计数排序,请按如下方式移动它们:(“count(*)DESC,键入ASC”)实际上,很遗憾,这并不能完全正确排序。当我进行count(*)DESC时,它会将具有(type=a).count=0的记录放在第一位,而不是放在后面。有没有办法解决这个问题?如果你把它倒过来,count(*)a会发生什么情况呢?很有趣,它总是把(type=a)和(count=0)放在顶部。我认为我需要的查询将花费太长的时间,并且正在将顺序简化为count(*)DESC.:)好的,它首先按类型排序,因此无论计数多少,类型A都将是第一个。如果要先按计数排序,请按如下方式移动它们:(“计数(*)说明,键入ASC”)