繁体   English   中英

检查mysql日期是否在日期之间

[英]Check mysql if date is between dates

我目前正在学习PHP,我想做一个租车系统来挑战自己。

现在我遇到了一个验证问题,我有5辆不同的汽车,并想在用户提交日期检查汽车是否可用。

我的数据库表中有一个开始日期,结束日期,汽车和ID

这就是我正在尝试的工作:

if($_POST){


$date1 = $_POST["startdate"];
$date2 = $_POST["enddate"];
$car= $_POST["car"];

$qry1 = "SELECT * FROM hire WHERE startdate between '{$date1}' and '{$date2}'
UNION
SELECT * FROM hire WHERE enddate between '{$date1}' and '{$date2}'";

$qry2 = "SELECT * from hire WHERE car = '{$car}'";

$results = mysql_query($qry1, $bd);
$results2 = mysql_query($qry2, $bd);
$row  = mysql_num_rows($results);
$row2  = mysql_num_rows($results2);

if ($row && $row2 > 1 ){
   die("it twerks");
}

else {
  //do stuff\
}
}

现在它说它总是可用的。

编辑

开始和结束日期均为DATE字段格式为Ymd。

首先,您想整合所有查询逻辑,以将重叠的保留查找到一个没有联合的查询中。 以下应返回指定日期范围内的可用汽车。

SELECT *
FROM hire
WHERE
  startdate  NOT BETWEEN '{$date1}' AND '{$date2}' OR
  enddate    NOT BETWEEN '{$date1}' AND '{$date2}' OR
  '{$date1}' NOT BETWEEN startdate  AND enddate    OR
  '{$date2}' NOT BETWEEN startdate  AND enddate

其次,您不能使用类似于以下逻辑语句的快捷方式:

if ( $row && $row2 > 1 )

它必须这样写:

if ( $row > 1 && $row2 > 1 )

第三, yadda yadda不使用mysql_*()函数。 [请参阅您对问题的评论中的脚手架。]

我推荐PDO。 它不仅支持mySQL,还支持更多的数据库系统,而MySQLi具有一些非常奇怪的语法。

抱歉,回复晚了。 我做了类似的事情,但对于床和早餐,房间预订系统。

请从正确规范化数据库开始。

您可以拥有三个表格,例如Car,Hire或Person。 您的汽车表,可以包含您所有的车辆描述。 人员表可以包含所有租车人的描述。 您的租金表将引用car_id和person_id。 它还将具有start_date和end_date。 像这样

  • 车表。

car_id(主键),car_color(文本),Car_make(文本)

**

  • 人表

** person_id(主键)person_name(文本)person_telephone(文本)

雇用表 Hire_Id(auto_increment)person_id(外键)car_id(外键)start_date(日期)end_date(日期)

$ Query =“ SELECT r。* FROM car r WHERE r.car_id NOT IN((从租车b选择b.car_id,其中NOT(b.end_date <'2014-08-15'或b.start_date>'2014-08-12 '))通过r.car_id进行订购;”

这将返回所有可用的汽车

您还可以在DATETIME列上直接使用MySQL比较功能: http : //dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#operator_between

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM