检查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字段格式为Y-m-d

很抱歉回复晚了。我也做过类似的事情,但是是关于住宿加早餐,客房预订系统。

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

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

  • 汽车表。

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

* *

  • Person表

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

<

雇佣表/strong>Hire_Id (auto_increment)Person_id(外键)Car_id(外键)start_date(日期)end_date(日期)

查询美元= "选择r。*源自car rWHERE r.car_id NOT IN ()选择b.car_id源自hire bwhere NOT (b.end_date'2014-08-12'))Order by r.car_id;"

返回所有可用的汽车

首先,您希望将所有查找重叠保留的查询逻辑合并到一个查询中,而不使用联合。下面的代码应该返回指定日期范围内的可用汽车。

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有一些非常奇怪的语法。

您也可以直接使用MySQL比较函数对DATETIME列:http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#operator_between