给定concerts
表和concerts.occurence_dates
类Array
列。
我需要使用ActiveRecord选择from_date
和to_date
内的音乐会。
我刚刚想出如何在from_date
之后选择事件:
Concert.where(':from_date < ANY(occurrence_dates)', from_date: from_date)
答案 0 :(得分:0)
作为mentioned in the official documentation
数组不是集合;搜索特定的数组元素可能是数据库错误设计的标志。考虑为每个将成为数组元素的项使用一个单独的表。这将更容易搜索,并且可能更好地扩展到大量元素。
这也适用于您的情况,尝试使用特定的数组元素执行搜索。
您使用的字段错误。您真正需要使用的是两个单独的列,一个用于to_date
,另一个用于Concert.where('from_date >= ? AND to_date <= ?', from_date, to_date)
,还有两个索引。
索引将确保快速查找,单独的列将允许您搜索传递一系列日期或仅使用
occurrence_dates
使用当前设置,您的最佳解决方案是扫描所有记录,选择每个[weak self]
并检查它们是否符合您的条件。
答案 1 :(得分:0)
可能的解决方案:
Concert.where('(occurrence_dates[0], occurrence_dates[array_length(occurrence_dates, 1)]) OVERLAPS (:from_date, :to_date)', from_date: from_date, to_date: to_date)