rails join left结合使用

在开发数据库后台统计报表时,需求包括按医院的医生数和订单数排序。通过Rails,实现了left join保持查询完整性,同时在left join时加入orders表的created_at时间条件,解决了where子句影响left join效果的问题,成功完成医院详情展示及排序功能。

今天我开发数据库后台统计报表的功能,需求是这样的:

  1. 用户可以查看医院列表,医院列表显示每个医院的医生数,订单数,以及相应地排序;
  2. 用户点击医生数,进入选中医院的详情,显示医生列表和医生详细信息,以及医生所下过的订单数,以及一系列的排序;
  3. 用户点击订单数,进入选中医院的详情,显示订单列表和详细信息,以及医生信息,以及一系列的排序;

好了看代码

@doctors_all = doctor.select("doctors.name, doctors.id, doctors.department, doctors.state ,doctors.phone, doctors.created_at,count(orders.id) AS order_count")
                    .joins("LEFT JOIN orders ON orders.doctor_id = doctors.id AND orders.created_at <= '#{end_date}'")
                    .group("doctors.id")
                    .order("#{query_where} #{sort}")

仔细看上面的代码:.joins("LEFT JOIN orders ON orders.doctor_id = doctors.id AND orders.created_at <= '#{end_date}'")
这里做了一件事情,就是把doctors和orders表通过id关联起来了,然后我需要实现joins left效果并且orders是有查询时间的,

问题来了,当你把
orders.created_at <= ‘#{end_date}’
这行代码写成where查询的时候,他就会失去left joins的效果,找了许久终于找到解决办法,就是在left joins的时候加上查询条件就行了

.joins("LEFT JOIN orders ON orders.doctor_id = doctors.id AND orders.created_at <= '#{end_date}'")

好了,功能终于做好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值