如何解决在两个日期之间选择php mysql
我有一个非常简单的SQL,这使我发疯。 我正在与汽车租赁公司合作-因此有一个FromDate和ToDate(已预订的汽车)
我的MySQL如下所示:
id | FromDate | ToDate
-----------------------
24 | 01.10.2020 | 31.10.2020
因此,如果用户在两者之间选择一个日期,他应该收到一条消息,提示该车已被预订。到目前为止,我已经尝试过:
SELECT id FROM booked_cars WHERE ($fromdate BETWEEN date(FromDate) AND date(ToDate)) AND vhId = $vhid
SELECT id FROM booked_cars WHERE ($fromdate BETWEEN date(FromDate) AND date(ToDate) AND $todate BETWEEN date(FromDate) AND date(ToDate)) AND vhId = $vhid
SELECT id FROM booked_cars WHERE (date(FromDate) BETWEEN $fromdate AND $todate) AND vhId = $vhid
我的$ fromdate,$ todate和$ vhid带有POST-Form。 值是
$fromdate = 03.10.2020
$todate = 07.10.2020
$vhid = 24
无论我尝试什么,我的$ statement-> rowCount()始终为零。
我正在将PDO与准备好的语句一起使用。我只是为了更好的阅读而写的。
$statement = $pdo->prepare("SELECT id FROM booked_cars WHERE (:fromdate BETWEEN date(FromDate) AND date(ToDate)) AND vhId = :vhid");
$statement->execute(array('fromdate' => $fromdate,'vhid' => $vhid));
echo $statement->rowCount(); // Alway 0 with BETWEEN (when i select just the vhid,i got the result)
解决方法
您需要在此处使用STR_TO_DATE
,数据库中保存的日期很可能具有YYYY-mm-dd
格式。
$statement = $pdo->prepare("SELECT `id` FROM `booked_cars` WHERE `vhId` = :vhid AND STR_TO_DATE(:fromdate,'%d.%m.%Y') BETWEEN `FromDate` AND `ToDate`;");
如果字段FromDate
和ToDate
的类型为DATETIME
:
$statement = $pdo->prepare("SELECT `id` FROM `booked_cars` WHERE `vhId` = :vhid AND STR_TO_DATE(:fromdate,'%d.%m.%Y') BETWEEN DATE(`FromDate`) AND DATE(`ToDate`);");
上面的查询类似于此DB Fiddle example中使用的查询。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。