【发布时间】:2021-01-18 22:13:50
【问题描述】:
我有一个非常简单的 SQL,让我发疯。 我正在与 Car Rental 合作 - 所以有一个 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)
【问题讨论】:
-
不,它没有。因为我的第二个日期不在第一个 @james 之前
-
FromDate 和 ToDate 字段的格式是什么?他们是日期时间吗?
-
尝试下一个:
$statement = $pdo->prepare("SELECT `id` FROM `booked_cars` WHERE `id` = {$vhid} AND ('{$fromdate}' BETWEEN `FromDate` AND '{$todate}' OR `FromDate` BETWEEN '{$fromdate}' AND '{$todate}')")