Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
将mysql查询转换为rails范围_Mysql_Ruby On Rails 4 - Fatal编程技术网

将mysql查询转换为rails范围

将mysql查询转换为rails范围,mysql,ruby-on-rails-4,Mysql,Ruby On Rails 4,我希望将这个mysql查询转换为一个名为stats的模型中的rails范围。下面是一个预期结果的示例。任何帮助都将不胜感激 scope :by_content, -> { select("date, title"). group(:title). order("title") } SELECT s.date as date, s.title as title, count(F.id) as impressions, count(D.event)

我希望将这个mysql查询转换为一个名为stats的模型中的rails范围。下面是一个预期结果的示例。任何帮助都将不胜感激

  scope :by_content, -> {
    select("date, title").
    group(:title).
    order("title")
  }


SELECT s.date as date, s.title as title,
  count(F.id) as impressions,
  count(D.event) as completed
FROM stats s
  Left Join stats as F on s.id = F.id and F.event ='play' and F.videopos = '0'
  Left Join stats as D on s.id = D.id and D.event = 'completed'
WHERE s.user_id = '2'
AND (s.date_time between '2014-03-08 00:00:00' and '2014-03-18 23:59:59')
AND s.title is not null
GROUP BY s.title

实际上,您想知道如何使用ActiveRecord查询转换原始sql。范围界定部分很简单。此railsguide应有帮助:。另外,我不会将所有这些代码放在一个范围内。你不希望一个范围变得庞大。最好链接多个作用域或为其编写一个类方法。谢谢@rails4guides.com我用这个解决了它。作用域:印象,->{joins(在stats.id=F.id和F.event='play'上以F的形式左连接stats,而F.videopos='0'))。选择(“stats.id,stats.title作为title,count(F.id)作为印象,(count(D.event)/count(F.id))作为完成”)}作用域:完成,->{joins(在stats.id=D.id和D.event='completed'上以D的形式左连接stats)}scope:by_title,->{group(:title).where(“stats.title不为空”).order(“count(stats.id)DESC”)}@jnbankston请用您的解决方案回答您的问题,更新您的帖子。在问答中,代码的可读性比在注释中要好得多。