Rails中多重子表多条件查询
在项目创建时为了逻辑上的简单,采用了多级子表嵌套;而且底层子表大多是静态表,即没有用has_one或belongs_to作为相互关系的.
在某个对象的搜索涉及到3个底层子表中的字段的比较,很难用where或find_by_sql方法,遂先用纯SQL语句写了个查询:
select r.*,tmp1.value from (select re.risk_id,tmp0.value from (select rl.risk_evaluate_id,rln.value from risk_levels rl inner join risk_level_names rln on rln.id = rl.risk_level_name_id) as tmp0 inner join risk_evaluates re on tmp0.risk_evaluate_id = re.id) as tmp1 inner join risks r on tmp1.risk_id = r.id
注意,这还只是查询的一部分,完整查询界面如下动画所示:
共有7个查询项,最深子表深度为3层,用pgAdmin查询结果如下:
我们可以直接在rails console中做测试:
ActiveRecord::Base.connection.execute("select r.id,tmp.degree from (SELECT re.risk_id as risk_id,rl.degree as degree FROM risk_evaluates re inner join risk_levels rl on rl.risk_evaluate_id = re.id) AS tmp inner join risks r on tmp.risk_id = r.id")
查询结果为hash数组,key为查询字段名.但是没法和其他条件混合起来使用,所以还是用map来做:
if @risks.count != 0 && risk_level_name_id != "-1"@risks = @risks.select do |risk|eval("risk.risk_evaluate.risk_level.risk_level_name.value " + risk_operator + "RiskLevelName.find(risk_level_name_id).value")end
end
但是数组有个问题,就是无法分页,will_paginate自从3.0版本后默认只能在ActiveRecord::Relation上分页.但是你可以手动开启在数组上的分页功能.
在项目config/initializers路径下新建一个rb文件,比如paginate_on_array.rb,内容如下:
require 'will_paginate/array'
再重试以下发现还是出错,原来需要重启rails服务器,重启之后搜索功能就完成了 ;)
Rails中多重子表多条件查询相关推荐
- SAP ABAP 动态内表的条件查询(SORT / READ TABLE / LOOP)
SAP ABAP 动态内表的条件查询(SORT / READ TABLE / LOOP) 简介: 动态内表是动态报表的核心,动态内表的条件操作能有效解决性能问题.这篇文章用于普及动态内表在 SORT ...
- springDataJpa入门教程(5)-单表动态条件查询+分页
springDataJpa入门教程 springDataJpa入门教程(1)-基于springBoot的基本增删改查 springDataJpa入门教程(2)-Specification动态条件查询+ ...
- jpa多表关联条件查询实现
通过实体类映射实现多表关联条件查询 jpa对于多表关联可以在实体类中进行关联映射,一对一用@OneToOne,一对多用@OneToMany,多对多用@ManyToMany,多对一用@ManyToOne ...
- mongotemplate 多表多条件查询记录
mongotemplate 多表多条件查询记录 在这里插入代码片
- 问:如何在SBO报表设计器中对LastName+FirstName进行条件查询
问:如何在SBO报表设计器中对LastName+FirstName进行条件查询? 答: declare @strUsr varchar(100) select @strUsr=a.FirstName ...
- laravel5.4中orm中的wherein与多条件查询
$array_1_11 = VenousThrombusAnswer:: where(['aa'=>'111','class'=>'M4']) ->whereIn('id',['47 ...
- 查询条件中含有加号_excel中最全的多条件查询方法都在这里了
今天在制作一个简单的公司人事查询,总结了一下多条件查询,原来excel中竟然有这么多的方法,那么可能会有不少人会认为:我只要会一种最简单的方法不就行了,干嘛要费脑子学那么多?其实学会更多不就是为了掌握 ...
- mybatis 中 Example 的使用 :条件查询、排序、分页(三种分页方式 : RowBounds、PageHelpler 、limit )
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. import tk.mybatis.mapper.entity.Example;import com ...
- mysql 中间表的好处_Mysql中使用中间表提高统计查询速度
对于数据量较大的表,在其上进行统计查询通常会效率很低,并且还要考虑统计查询是否会对在线的应用产生负面影响.通常在这种情况下,使用中间表可以提高统计查询的效率, 下面通过对session 表的统计来介绍 ...
最新文章
- 计算机中的大端模式与小端模式
- python multiprocessing manager list error: [Errno 2] No such file or directory
- Where do SAP CRM HANA Live Querys come from
- pyqt安装_Win10下安装LabelImg以及使用(绝对是全网最简单的教程)
- java代码获取gc信息,如何监视Java垃圾回收
- 在openGL中绘制图形
- 化合物修饰壳聚糖水凝胶:丙烯酸接枝/聚乙烯醇/温敏淫羊藿苷/醛-亚胺-壳聚糖水凝胶的制备
- 磁共振线圈分类_磁共振线圈的发展历程
- 扯淡扯着扯着就远了----关键字;宁静致远
- 苹果12系列不附赠耳机充电器引争议,你还会买吗?
- iOSapp的json告示
- Google Professional Data Engineer(PDE)考试
- 蓝桥杯单片机学习记录(8)(PWM脉宽调制)
- Android的鼠标事件流向
- 用C#制作PDF文件全攻略 .
- 利用小技巧用于跟踪函数的进出过程
- 文献管理软件 | endnote与zotero的对比
- PyTorch 图像识别实战
- redis“万金油”的String,为什么不好用了?
- 相似图片搜索的三种算法
热门文章
- 世界前 1000 顶级计算机科学家名单出炉;Java25岁生日官方启动最佳JDK功能票选活动...
- 微调电位器命名规则_vishay电阻命名规则知多少
- android百度地图画线,Android实现百度地图两点画弧线
- Python Web开发 之 学生管理系统(2)[实现筛选,搜索,分页]
- 地大网上报账之日常报销流程
- AI的入门圣经,PRML最全资源合集(含讲解以及中译版)
- 基于 Alexnet 的服装图像模式识别系统的设计与实现
- 深度学习——Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
- 如何将footer标签固定在底部_div footer标签css实现位于页面底部固定
- 广东计算机类专科院校排名,广东省高职院校全国排名+各院校王牌专业