mysql获取上述两个日期变量之间/以上的记录

b1payxdu  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(332)

我有个问题。我在下面的例子中使用了laravel,但是我的问题与mysql有关。
假设我有一张预约表。预约可以是任何时间。
所以我有两个约会;
预约a:2019年3月2日上午10时至11时
预约b:2019年3月1日晚上11点至2019年3月2日上午9点
所以;如果我在3月1日和2日之间搜索记录-我将得到2个结果。例如,“其中日期<=3月1日和<=3月2日”
别介意命令-这只是一个例子。
我的底线是,如果我在3月1日到2日之间搜索记录,我会得到两个预约。
我的问题是;如果我在4月29日到3月4日有活动怎么办?
例如:;
预约a:2019年3月2日上午10时至11时
预约b:2019年3月1日晚上11点至2019年3月2日上午9点
预约c:4月29日下午3点-3月4日下午4点
所以如果我有两个日期,我说“where date>=2019-03-01 and<=2019-03-02”,那么我仍然会得到预约a和预约b。
但在现实中,空间将被占用,因为任命c
我怎么还能在两个日期变量之间搜索记录呢?但是找到约会c的方法呢?
所以,基本上,当我绘制/编辑日历时,我会有我的日历表,并查看预约a和预约b-但我应该将预约c视为全天事件。
我不想从数据库中选择所有约会记录并对它们进行排序-我希望有更好的解决方案。

5us2dqdw

5us2dqdw1#


假设我们必须找到发生在t1和t2之间的事件。例如,我们有跨越a1和a2、b1和b2以及c1和c2的事件。
根据您所说,下一个公式将满足您的要求:
如果事件在请求的t1之前开始,它必须在t1之后结束
如果事件在之后开始(或在t1),则需要检查它是否在请求的t2之前开始。

SELECT * FROM some_table WHERE (start_date < t1 AND end_date > t1) OR (start_date >= t1 AND start_date < t2)

在这里 t1 以及 t2 是请求范围的边界, start_date 以及 end_date 在mysql中存储相应数据的列。

相关问题