我正在尝试预订系统而且我遇到了一个错误。 我有一个开始日期和结束日期,如果我输入一个日期开始结束,该结束日期已经使系统说不可能,但是如果我在已经占用的时间段之前和之后输入系统接受预订
这是我现在检查的方式
`$db_check_result1 = mysql_query("SELECT * FROM ms_bookings WHERE ms_bookings_calid = '$propertyId' AND '$convertedstartdate' BETWEEN ms_bookings_startdate AND ms_bookings_enddate") or die(mysql_error());
如果结果大于0,那么预订日期是不可能的,我和出发日期一样
$db_check_result2 = mysql_query("SELECT * FROM ms_bookings WHERE ms_bookings_calid = '$propertyId' AND '$convertedenddate' BETWEEN ms_bookings_startdate AND ms_bookings_enddate") or die(mysql_error());
如果结果大于0则再次,则无法预订
如果新请求属于已经输入的预订,但是当到达和离开日期在系统接受的现有日期之前和之后
,它可以正常工作我该如何解决这个问题?
答案 0 :(得分:0)
为了解决这个问题:
mysql_*
函数。 mysql扩展已从当前的PHP版本中删除(从PHP 7.0开始)。使用mysqli(请注意" i")或pdo_mysql。那就是说,你想要的第三次检查是
SELECT * FROM ms_bookings
WHERE ms_bookings_calid = :propertyId
AND (ms_bookings_startdate BETWEEN :convertedstartdate AND :convertedenddate
OR ms_bookings_enddate BETWEEN :convertedstartdate AND :convertedenddate)
但是,您可以将所有检查合并为一个更简单的查询:
SELECT * FROM ms_bookings
WHERE ms_bookings_calid = :propertyId
AND :convertedstartdate <= ms_bookings_enddate
AND :convertedenddate >= ms_bookings_startdate
为了不重叠,新预订必须在现有预订结束后开始(:convertedstartdate <= ms_bookings_enddate
将为假),或者必须在之前结束 / em>现有预订开始(:convertedenddate >= ms_booking_startdate
为假)。