我现在正在学习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。
答案 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