如果日期是在日期之间,请检查mysql

时间:2014-05-15 21:06:27

标签: php mysql

我现在正在学习php,我想制造一个租车系统来挑战自己一点。

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

我的数据库表有一个startdate,enddate,car和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\
}
}

现在它说它始终可用。

编辑

start和enddate是DATE字段格式为Y-m-d。

3 个答案:

答案 0 :(得分:0)

首先,您要整合所有查询逻辑,以便在没有联合的查询中找到重叠预留。以下内容应返回指定日期范围内的可用汽车。

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

答案 1 :(得分:0)

嘿对不起,迟到了。我做了类似的事情,但住宿加早餐,房间预订系统。

请首先正确规范数据库。

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

  • 购物车。

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

**

  • 人员表

** person_id(主键) person_name(文字) person_telephone(text)

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

$ Query =" SELECT r。* 来自汽车 在哪里r.car_id NOT IN( 选择b.car_id 从雇用b NOT(b.end_date<' 2014-08-15'或b.start_date>' 2014-08-12')) 按r.car_id排序;"

返回所有可用的汽车

答案 2 :(得分:-1)

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