MySQL在两个日期变量之间获得记录

时间:2018-05-12 20:23:03

标签: php mysql laravel date between

我有一个MySQL问题。我在下面的例子中使用了Laravel,但我的问题与MySQL有关。

假设我有一个约会表。约会可以是任何期限。

所以我有2个约会;

  1. 任命A:2019年3月2日上午10点至上午11点
  2. 预约B:2019年3月1日晚上11点至2019年3月2日上午9点
  3. 因此;如果我在3月1日和2日之间搜索记录 - 我将获得2个结果。类似的事情,"其中date< = 3月1日和< = 3月2日"

    不要介意这个命令 - 这只是一个例子。

    我的底线是,如果我在3月1日到2日之间搜索记录,我将获得两次约会。

    我的问题;如果我在4月29日到3月4日举办活动怎么办?

    作为一个例子;

    1. 任命A:2019年3月2日上午10点至上午11点
    2. 预约B:2019年3月1日晚上11点至2019年3月2日上午9点
    3. 预约C:4月29日下午3点至3月4日下午4点
    4. 所以,如果我有两个约会,我说" WHERE date> = 2019-03-01 AND< = 2019-03-02" - 然后我仍然会得到预约A和预约B.

      但实际上,由于任命C

      ,空间将被占用

      我怎样才能搜索2个日期变量之间的记录 - 但是找到约会C的方法呢?

      所以,基本上,在绘制/编制我的日历时,我会有我的日历表,看看预约A和预约B - 但我也应该看到约会C作为全天活动。

      我不想从数据库中选择所有约会记录并对其进行排序 - 我希望有更好的解决方案。

1 个答案:

答案 0 :(得分:0)

Time 想象一下,我们必须找到t1和t2之间发生的事件。例如,我们的事件跨越a1和a2,b1和b2以及c1和c2。

根据您的说法,下一个公式将满足您的要求:

  1. 如果事件在请求t1之前启动,则必须在t1
  2. 之后结束
  3. 如果事件在AFTER(或t1)之后开始,您需要检查它是否在请求t2之前启动。
  4. SELECT * FROM some_table WHERE (start_date < t1 AND end_date > t1) OR (start_date >= t1 AND start_date < t2)
    

    此处t1t2是请求范围的边界,start_dateend_date是在MySQL中存储相应数据的列。