所以我要建一个汽车订票网站。还有一个汽车桌是这样的:
汽车
还有一张这样的预订桌:
保留:
因此,当用户输入他们想预订汽车的日期时,我会查询我的预订表:
如果日期已经在预订表中,我想要获得汽车ID,然后将该汽车排除在显示用户的列表中,这样他们就无法预订它。
我的问题是,我有多个汽车在数据库中是相同的模式和制造,但有一个不同的CarID和注册。
我还将汽车按型号分组,这样用户只会看到一辆特定类型的汽车。
$carstring = mysql_query("SELECT * FROM cars {$statement} AND deleted = 'no'" GROUP BY CarModel);
$getcars = $carstring;
while($searchcars = mysql_fetch_array($getcars)) {
$checkreservations = mysql_query("SELECT * FROM reservations WHERE startDate = '".$sqlcoldate."' and carID = '".$searchcars['carID']."'");
$thiscar_num_rows = mysql_num_rows($checkreservations);因此,您可以在一分钟内看到,我可以知道哪些车是在预订表中,我可以回音真假从num_rows
但是,我认为这是错误的,因为我想做的是找出CarID已经占用了哪些汽车,然后将它们排除在向用户显示所有汽车的$getcars查询循环中,然后按模型分组。
有人能告诉我做这件事的方法,或者更好的方法吗?
发布于 2013-03-07 10:56:07
排除保留的汽车的一种简单方法是使用一个子查询,该子查询获取所有保留的汽车,而不是在主查询中声明那些汽车不允许使用CarID not in construction。
<?php
// select all cars that are not reserved at sqlcoldate
$sql = "SELECT *
FROM Cars
WHERE CarID NOT IN (
SELECT CarID
FROM Reservations
WHERE StartDate > '".$sqlcoldate."' and EndDate < '".$sqlcoldate."'
)
GROUP BY CarModel";
// execute that query
$result = mysql_query($sql);
// if there are no results print a message
if (mysql_num_rows($result) == 0) {
echo "No cars found";
exit; // Exit the function, because there is nothing to do
}
// else print all available cars
while ($row = mysql_fetch_assoc($result)) {
echo "Model available car is :" . $row["CarModel"] . " </br>";
}
?>发布于 2013-03-07 11:00:08
实际上并没有测试过。但它应该有效
SELECT c.* FROM cars c
LEFT JOIN reservations r
ON c.carID=r.carID AND
selected_date BETWEEN r.startDate AND r.endDate
WHERE r.carID is nullhttps://stackoverflow.com/questions/15268707
复制相似问题