【问题标题】:SELECT BETWEEN two dates php mysql [duplicate]在两个日期之间选择 php mysql [重复]
【发布时间】: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)

【问题讨论】:

  • 这能回答你的问题吗? How do I query between two dates using MySQL?
  • 不,它没有。因为我的第二个日期不在第一个 @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}')")

标签: php mysql date between


【解决方案1】:

您需要在这里使用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`;");

如果字段FromDateToDate 类型为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 中使用的查询类似。

【讨论】:

  • 谢谢彼得。这样我得到了一个结果。但是当我选择一个不在 f.e. 范围内的日期时,我什至得到了一个结果。 01.11.2020 - 05.11.2020。有什么建议吗?
  • 在尝试弄清楚应该如何在 PHP 中执行之前,请在 MySQL 控制台中手动编写查询并使其正常工作。然后,您可以弄清楚如何在 PHP 中执行此操作。在这种情况下,您只在查询中提供“fromDate”,您还需要使用“toDate”
猜你喜欢
  • 2017-01-17
  • 2017-12-31
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多