我正在寻找一种方法来编写一个查询,以查找免费会议室的日期。 我有两张桌子: 一张桌子上有会议室和会议室的名字 预订表包含两个字段:开始日期[date_from]和结束日期[date_end]
寻找会议室的新客户首先在租用房间和结束日期间在搜索引擎中输入。如何搜索注册表以考虑那些日期之间预订的天数,并仅显示那些免费的会议室。
例如,2018年3月6日至2018年3月8日的表格以及2018年3月4日至2018年3月7日的2号房间保留了1号房间的时间表。我正在寻找房间从2018年3月8日到2018年3月9日
您建议采用哪些方式?
答案 0 :(得分:0)
假设模型名称为ConferenceRoom& ConferenceBooking,因此相应的表将像conference_rooms& conference_bookings。 提供date_from和date_end参数后,查询将类似于
ConferenceRoom.
left_joins(:conference_bookings).
where(
"conference_bookings.date_from > ? OR
conference_bookings.date_end < ?", date_end, date_from
)
查询获取会议室的结果,其预订结束日期低于提供的date_from
值和会议室,其预订开始日期大于提供的date_end
值。
答案 1 :(得分:0)
首先从日期范围内预订的房间中获取所有ID。
ids = Booking.where("date_from <= ? AND date_end >= ?", date_end, date_from).pluck(:room_id)
所有其他房间都是免费的:
free_rooms = Room.where.not(id: ids)