主页

Mysql判断一个时间段是否和另一个时间段冲突(实现预约老师功能)?

未呓   IP属地: 青海
0 点赞 0阅读 2139

在实现一个预约功能的时候遇到的一个时间问题,如用户预约了每天的17:00-18:00,一共预约了30两天,那么用户预约的总时长是30个小时,那么这30天的17:00-18:00都不能被其他用户预约了,如16:00-18:00这样的是能预约的,这种是按小时约的,还有一种就是按天预约,如2021:09-01-2021-09-25,如果有用户把1-25号的按整天预约了,那么按小时预约的在2021:09-01-2021-09-25时间段都不能被预约.
这里我用的是存储过程去处理(里面的传值和条件判断字段改成自己的逻辑)

看代码(myslq储存过程):

DELIMITER $$

USE `miaodida`$$

DROP PROCEDURE IF EXISTS `study_reserve_date_check`$$

CREATE DEFINER=`miaodida`@`%` PROCEDURE `study_reserve_date_check`(IN bTime VARCHAR(50),IN eTIme VARCHAR(50),IN studygroupid INT(10))
BEGIN
    SET @bTime=bTime;
    SET @eTIme=eTIme;
    SET @studygroupid=studygroupid;
    
	SELECT id,study_id,study_group_id,seat_num,`type`,date_start,date_end FROM m_study_order WHERE study_id=@studygroupid AND is_pay=1 AND 
((@bTime>=date_start AND @bTime<date_end) OR(@bTime<date_end AND @eTIme>date_end) OR(@bTime<=date_start AND @eTIme>date_start));
END$$

DELIMITER ;

使用:mysql执行 CALL study_reserve_date_check('2021-08-18 09:00','2021-08-20 11:00',12)

例子:

DELIMITER $$

USE `miaodida`$$

DROP PROCEDURE IF EXISTS `study_reserve_time_check`$$

CREATE DEFINER=`miaodida`@`%` PROCEDURE `study_reserve_time_check`(IN bTime VARCHAR(50),IN eTIme VARCHAR(50),IN studygroupid INT(10),IN seat INT(10))
BEGIN
    SET @bTime=bTime;
    SET @eTIme=eTIme;
    SET @studygroupid=studygroupid;
    SET @seat=seat;
    
	SELECT id,study_id,study_group_id,seat_num,`type`,date_start,date_end FROM m_study_order WHERE study_id=@studygroupid AND seat_num=@seat AND is_pay=1 AND
((@bTime>=date_start AND @bTime<date_end) OR(@bTime<date_end AND @eTIme>date_end) OR(@bTime<=date_start AND @eTIme>date_start));
END$$

DELIMITER ;


© 著作权归作者所有,转载或内容合作请联系作者