我正在尝试查找与给定日期范围重叠的所有列表,但它并没有按预期工作。我有一个“UnavailableDate”模型,带有 id、start_date、end_date 和 Listing_id。到目前为止,我所拥有的是:
@unavailable_listings = UnavailableDate.find_by_sql("SELECT listing_id, SUM((LEAST(extract(epoch FROM end_date), #{check_out.to_i}) - GREATEST(extract(epoch FROM start_date), #{check_in.to_i}))/86400) AS overlap FROM unavailable_dates GROUP BY listing_id")
这在一定程度上是有效的,尽管当列表有多个“UnavailableDate”时,SUM 无法正常工作。但是,我真正需要做的是添加一个 WHERE 子句,因此只能找到那些“重叠”大于 X 的列表。解决这个问题的最佳方法是什么?
基本上,我希望这个查询产生一个列表 ID 数组,然后我可以在 :without 子句中的主要 Thinking Sphinx 查询中使用它(以删除超过 50% 的搜索日期不可用的所有列表)。似乎是一种相当低效的方法,但我认为这是我唯一的选择
提前感谢您的任何建议!