检查MySQL数据库表中是否有预订槽的最佳方法

时间:2013-02-27 21:14:11

标签: php mysql database pdo

我现在为我的预订系统安装了数据库和表格结构。我现在需要能够在一组日期内搜索某辆车是否可用。我的表结构是:

car_table :(存储汽车信息)

ID     | car_make | car_name
1      | Ford     | Focus
2      | BMW      | Z3
3      | Audi     | A5

booking_table :(存储大部分信息 - 日期,ID等)

booking_ID  | start_date | end_date
125674      | 2013-02-27 | 2013-03-01    
887463      | 2013-03-05 | 2013-03-07     
209930      | 2013-03-16 | 2013-03-22  

reservation_table :(将汽车与预订联系起来)

ID     | booking_ID | car_ID
1      | 125674     | 2
2      | 887463     | 2
3      | 209930     | 1

使用PDO PHP,最好的搜索查询是什么,以确保只有可用日期显示为可预订,因为我需要确保我没有重复预订/日期。目前我所能想到的是在客户要求的日期期间搜索任何预订,如果我得到任何结果,那么这意味着它不可用,否则我可以继续:

$query_params = array( 
   ':start_search' => $_POST['user_selected_startdate'],
    ':end_search' => $_POST['user_selected_enddate'],
);

$query = " 
    SELECT 
        *
    FROM 
        booking_table
    WHERE 
        start_date BETWEEN :start_search AND :end_search AND
        end_date BETWEEN :start_search AND :end_search 
"; 

try { 
    $stmt = DB::get()->prepare($query); 
    $stmt->execute($query_params); 

    $rows = $stmt->fetchAll();
}  
catch(PDOException $ex) { 
    die("Failed to run query: " . $ex->getMessage()); 
} 

if(!$rows) {
    // booking is available, continue and pay
}
else {
    // booking is unavailable, try again
}

这是确保没有一本书在另一个插槽上的最佳程序和更安全的方法吗?

0 个答案:

没有答案