当前位置: 首页 > 面试题库 >

如何将SQL查询转换为Rails Active Record查询?

魏景龙
2023-03-14
问题内容

我的最后一篇文章是关于在LEFT OUTER JOIN上编写带有条件的SQL查询的最佳方法:
LEFT OUTER
JOIN带有条件(在哪里排序)?

现在,我需要将该段好的SQL转换成一个不错的Active Record查询(Rails 3)。;-)

我有2个型号:

培训 has_many:training_histories

TrainingHistory 所属类别:培训

如何编写范围以获取下面的SQL检索的结果?

SELECT tc.id, tc.name, tc.order, 
th.id as history_id, th.finished_at, th.score
FROM trainings tc
LEFT OUTER JOIN training_histories th ON th.training_id = tc.id 
    and th.id =
    (SELECT th1.id from training_histories th1 where th1.training_id = tc.id
     and th1.finished_at is not null
     order by th1.finished_at desc limit 1)
WHERE tc.id > 4
AND tc.id < 8
GROUP BY tc.id
ORDER BY tc.order_by ASC, tc.id ASC

我想检索TRAININGS的所有记录,并添加TRAINING_HISTORIES的最后一个有效(也称为完成)的关联记录。

有什么建议 ?

谢谢


问题答案:

对于rails 3,请尝试以下操作:

Training.select("trainings.id, trainings.name, trainings.order, 
                 trainings.id AS history_id, training_histories.finished_at,
                 training_histories.score").
         joins("LEFT OUTER JOIN training_histories 
                ON training_histories.training_id = trainings.id 
                AND training_histories.id = (SELECT th1.id FROM training_histories th1          
                                             WHERE th1.training_id = tc.id
                                             AND th1.finished_at IS NOT NULL
                                             ORDER BY th1.finished_at DESC LIMIT 1)").
         where("trainings.id > 4 AND trainings.id < 8").
         group("trainings.id").
         order("trainings.order_by ASC, trainings.id ASC")

基本上,您只是将预先编写的查询转换为Rails 3 finderhtml" target="_blank">方法。



 类似资料:
  • 我想在JPA 2.1中将“命名查询”转换为“SQL查询”,并在运行之前对其进行更改。 例如,我有一个命名查询:从CU所在的客户中选择CU。代码=?1,我希望在PAR之后获得查询并对其进行转换和编辑(例如添加模式名称)并创建此查询:从db1.cc1cust cu中选择*其中cu.cc1cod=?1. 我该怎么做? 问候

  • 问题内容: 我想将以下SQL查询转换为Elasticsearch之一。谁能帮上忙 我尝试了以下方法: 但不确定我是否做对了,因为它无法验证结果。似乎要在聚合内添加查询。 问题答案: 假设您使用Elasticsearch 2.x,则有可能在Elasticsearch中 具有 -semantics。我不知道2.0之前的可能性。 您可以使用新的Pipeline Aggregation Bucket Se

  • 问题内容: 多亏了Erwin Brandstetter在我之前的问题“具有has_many关系的订单”中的帮助,我的SQL查询才能正常工作。 如何将该SQL转换为ActiveRecords或AREL查询以在范围中使用? 我最近来的是在朋友的帮助下… …这给了我一个错误: 更新: 我之前的问题对相关的架构和查询有完整的描述。但是基本上Articles have_many Metrics和一个Metr

  • 问题内容: 我有很多这样的SQL查询: 这些查询必须在不同的数据库引擎(MySql,Oracle,DB2,MS-Sql,Hypersonic)上运行,所以我只能使用通用的SQL语法。 在这里,我读到,使用MySql时,该语句未经过优化,而且速度确实很慢,因此我想将其切换为。 我试过了: 但这没有考虑到关键字。 问题:如何使用该方法消除重复的行? 问题答案: 要使用JOIN编写此代码,可以使用内部选

  • 我有两个表,它们通过一个外键来维护它们之间的父子关系。查询如下所示。我想在使用jpa的同时使用标准版。所以有人可以帮助我使用标准版吗 表“child”的“notification\u id\u child”列是外键,并引用表“parent”的主键。

  • 我使用了cakephp Mysql到mongodb查询组件,即将Mysql查询转换到mongodb中,但是当查询有多个括号时代码停止工作,我还尝试将http://www.querymongo.com/site上的查询转换为相同的问题,