Mysql 返回日期时间列介于用户输入的日期、小时和小步之间的数据

Mysql 返回日期时间列介于用户输入的日期、小时和小步之间的数据,mysql,Mysql,我在从表返回数据时遇到了重大问题,其中日期介于六个用户输入之间。用户可以选择从日期、从小时、从小步舞曲到日期、到小时和到小步舞曲。目的是,如果在表中找到输入,将显示Jquery警报 我的表有两个“datetime”列,包含开始日期和时间以及结束日期和时间。i、 e 开始日期和时间“2018-09-14 08:00:00” 结束日期和时间:“2018-09-14 16:00:00” 在用户输入表单上,我有以下文本字段: RoomFromDate,从弹出日历中选择的日期。所选日期 现阶段的格式为“

我在从表返回数据时遇到了重大问题,其中日期介于六个用户输入之间。用户可以选择从日期、从小时、从小步舞曲到日期、到小时和到小步舞曲。目的是,如果在表中找到输入,将显示Jquery警报

我的表有两个“datetime”列,包含开始日期和时间以及结束日期和时间。i、 e

开始日期和时间“2018-09-14 08:00:00” 结束日期和时间:“2018-09-14 16:00:00”

在用户输入表单上,我有以下文本字段:

  • RoomFromDate,从弹出日历中选择的日期。所选日期 现阶段的格式为“d-m-Y”
  • RoomToDate,从弹出日历中选择的日期。所选日期为 现阶段以“d-m-Y”的形式
  • RoomFromTimeH,从包含时间的下拉菜单中选择 时间从00点到23点
  • RoomToTimeH,从包含小时数的下拉菜单中选择 从00点到23点
  • RoomFromTimeM,从包含时间的下拉菜单中选择 小步舞曲从00到59
  • RoomToTimeM,从包含时间的下拉菜单中选择 小步舞曲从00到59
当选择“RoomToTimeM”时,它会触发一个Jquery/Ajax脚本,该脚本将查询信息发布到一个php脚本“check_record_avail.php”,该脚本运行查询并在找到记录时返回数据

查看浏览器控制台,我可以看到正确的用户选择通过Ajax发布到“check_record_avail.php”,如下所示

console.log("Check date and time:",fromdate, fromhours, frommins, todate, tohours, tomins);
FromDate: 14-09-2018
FromTimeHours: 08
FromTimeMins: 00
ToDate: 14-09-2018
ToTimeHours: 16
ToTimeMins: 00
在我的“check_record_avail.php”脚本中,我有以下内容:

if(isset($_POST['FromTimeHours'])){
$FromTime = $_POST['FromTimeHours'];
}
//echo "From time ". $FromTime."<br/>";

if(isset($_POST['FromTimeMins'])){
$FromTimeMins = $_POST['FromTimeMins'];
}
//echo "From time mins ". $FromTimeMins."<br/>";

if(isset($_POST['ToDate'])){
$ToDate = $_POST['ToDate'];
}
//echo "To date ". $ToDate."<br/>";

if(isset($_POST['ToTimeHours'])){
$ToTime = $_POST['ToTimeHours'];
}
if(isset($_POST['ToTimeMins'])){
$ToTimeMins = $_POST['ToTimeMins'];
}

$FromDateTime = $FromDate . " " . $FromTime . ":".$FromTimeMins.":00";
$ToDateTime = $ToDate . " " . $ToTime . ":".$ToTimeMins.":00";

    //With the help of Stackoverflow member "scaisEdge" I have the follwong query:

SELECT ClientName, RoomName, RoomFromDateTime, RoomToDateTime FROM Conf
WHERE HotelID = '".$HotelID."' AND RoomID = '".$RoomID."' AND (RoomFromDateTime
BETWEEN str_to_date('".$FromDateTime ."', '%Y-%m-%d %T' ) AND str_to_date('".$ToDateTime."',  '%Y-%m-%d %T' 
OR RoomToDateTime BETWEEN str_to_date('".$FromDateTime ."','%Y-%m-%d %T' ) AND str_to_date('".$ToDateTime."','%Y-%m-%d %T' ))
运行此查询将返回1条记录

但是,如果我将“$FromTimeHours”更改为小于“16”的任何小时时间,查询将返回零条记录

我甚至尝试过将所有日期时间转换成UNIX时间戳,但结果是一样的。谁能帮我解决这个问题

非常感谢您的光临。

选择客户端名称
SELECT ClientName
     , RoomName
     , RoomFromDateTime
     , RoomToDateTime 
  FROM Conf
 WHERE HotelID = 'EXBHX' 
   AND RoomID = 3 
   AND RoomFromDateTime < '2018-09-15 16:00:00'
   AND RoomToDateTime > '2018-09-15 08:00:00'
,房间名 ,RoomFromDateTime ,今天的房间 来自Conf 其中HotelID='EXBHX' 和RoomID=3 和RoomFromDateTime<'2018-09-15 16:00:00' 和RoomToDateTime>'2018-09-15 08:00:00'
用户提交一个日期时间字符串作为范围的开始,一个作为范围的结束。然后将该范围与数据进行比较。就这样。所有这些str_to_日期都不是毫无意义的,顺便说一句,如果范围A在范围B结束之前开始,在范围B开始之后结束,那么范围A与范围B重叠。嗨,就这么简单,效果很好。我没有想到要交换输入数据。经过几个小时的努力,我们已经学会了这一点。非常感谢您的时间和专业知识。不客气。请注意,如果另一个用户提交插入<代码>,而您正在检查,您可能需要考虑会发生什么情况。
SELECT ClientName
     , RoomName
     , RoomFromDateTime
     , RoomToDateTime 
  FROM Conf
 WHERE HotelID = 'EXBHX' 
   AND RoomID = 3 
   AND RoomFromDateTime < '2018-09-15 16:00:00'
   AND RoomToDateTime > '2018-09-15 08:00:00'