SQL对于预约时间范围段是否可以预约(会议室预约)

1:对于预约一个时间段,查询数据库是否有数据,有就代表不可以预约

在这里插入图片描述

start为会议室要预约的开始时间,end为会议室要预约的结束时间

dataStart为数据库已经存在的预约开始时间,dataEnd为数据库已经存在的预约结束时间

2-1:可以分几种写法SQL语句

第一种:根据分段花圈来判断

	WHERE 
	--满足第二和第四种情况
	dataStart>=start AND dataEnd>=start
	OR
	--满足第一和第三种情况
	dataStart>start AND dataStart<=end

第二种:根据分段花圈来判断

	
	WHERE 
	--满足第三和第四种情况
	dataEnd>=end AND dataStart<=end
	OR
	--满足第一和第二种情况
	dataEnd<=end AND dataEnd>=start

3-1:如果是预约某天的情况,可进行优化

可以给此条件先进行按需要预约日期加索引筛查出查询的数据,如下

	--先将start的开始时间截取年月日,设置为开始时间为00:00:00,结束为23:59:59
	--例如,预约开始时间为2023-02-20 21:00:00
	--查询那天有多少预约记录
	WHERE start BETWEEN '2023-02-20 00:00:00' AND '2023-02-20 23:59:59'
	AND
	--满足第三和第四种情况
	dataEnd>=end AND dataStart<=end
	OR
	--满足第一和第二种情况
	dataEnd<=end AND dataEnd>=start

3-2:再进行查询优化,加上LIMIT 1

可以给此条件先进行按需要预约日期加索引筛查出查询的数据,如下

	--先将start的开始时间截取年月日,设置为开始时间为00:00:00,结束为23:59:59
	--例如,预约开始时间为2023-02-20 21:00:00
	--查询那天有多少预约记录
	WHERE start BETWEEN '2023-02-20 00:00:00' AND '2023-02-20 23:59:59'
	AND
	--满足第三和第四种情况
	dataEnd>=end AND dataStart<=end
	OR
	--满足第一和第二种情况
	dataEnd<=end AND dataEnd>=start 
	LIMIT 1

知识补充:

如果SQl语句中使用BETWEEN ** AND**查询,如果字段已经使用了索引,但是执行计划查询没有使用索引是因为,如果查询的数据为表总数据的60%就会进行全表查询,低于就会进行索引查询

猜你喜欢

转载自blog.csdn.net/qq_19891197/article/details/129045314
今日推荐