0

作为参考,这个问题令人难以置信,因此感谢所有帮助解决这个问题的人。

我正在尝试在事件长度不同的预订程序中定位潜在的事件冲突。

(a ≤ x && e ≥ y) || (a ≥ x && e ≤ y) || (a ≤ x && e ≤ y) || (a ≥ x && e ≥ y)

我正在使用 DataMapper 来完成此操作,但我之前的查询是错误的。然后我想出了上述内容,但我不确定如何将其转换为查询。以下是我的错误查询以供参考

class Table
  def is_available?
     return false if (TableBooking.all(:at.lte => params[:at], :at.gt => params[:ending], :ending.gt => params[:at], :ending.gte => params[:at]).count > 0)
  end
end
4

2 回答 2

2

我认为您真正想要的是:

(a ≤ x && e ≥ y) || (a ≥ x && e ≤ y) || (a ≤ x && e ≥ x) || (a ≤ y && e ≥ y)

由于这占(对应于上面的每个组)...

  1. a,e 包括 x,y
  2. a,e 包含在 x,y 中
  3. a,e 在 x,y 之前开始但不在 x,y 之前结束
  4. a,e 在 x,y 之后结束,但不在 x,y 之后开始

前两个部分与您的原始部分相同,但我不得不更改后两个部分以使其有意义且正确。

这实际上也可以简化,因为#3 和#4 会自动捕获#1,所以你真的只需要#2-4:

(a ≥ x && e ≤ y) || (a ≤ x && e ≥ x) || (a ≤ y && e ≥ y)
于 2010-01-02T23:09:21.387 回答
0

您给出的不等式可以简化为

(a ≤ x || a ≥ x) && (e ≤ y || e ≥ y)  

可以进一步简化为

True

这可能是代码不起作用的原因。

于 2010-01-02T23:07:59.967 回答