簡體   English   中英

從ID不在其他查詢中的房間中選擇ID +(日期比較)

[英]Select ID from rooms where ID not in another query + (Date compare)

我有兩個桌子,房間和預訂。

Rooms
id        description        beds        price
1         blah blah          2           100
2         blah blah          3           100
3         blah blah          4           100
4         blah blah          2           100

Reservations
id        room_id        checkin        checkout            paid
1         1              5-5-2017       7-5-2017            1
2         2              5-5-2017       9-5-2017            1
3         2              10-5-2017      12-5-2017           0
4         3              2-5-2017       4-5-2017            1

而且我的PHP代碼中有

user inputs $checkin, $checkout (dates) and $adults, $children
$sql = "SELECT id FROM rooms WHERE beds >= ($adults + $children) AND id NOT IN (SELECT room_id FROM reservations WHERE ($checkin BETWEEN checkin AND checkout) AND room_id IS NOT NULL) ";

結果是整個表以及我輸入的任何日期。

任何人都知道哪里錯了嗎?

樣品

User input

Checkin : 6-5-2017
Checkout : 8-5-2017
Adults : 1
Children : 0

我應該拿ID 3和4的房間

<?php
    require('connect.php');
    $checkin = $_POST['checkin'];
    $checkout = $_POST['checkout'];
    $adults = $_POST['adults'];
    $children = $_POST['children'];
    $valid = $_POST['cameFromRegisterPage'];

    if(!isset($valid) || $valid != 'true'){
        header("location: ./books.php"); 
    }

    $sql = "SELECT id FROM rooms WHERE beds >= ($adults + $children) AND id NOT IN (SELECT room_id FROM reservations WHERE ($checkin BETWEEN checkin AND checkout) AND room_id IS NOT NULL) ";
    $result = $con->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            echo "<div style='width:90%;background-color:#ffffff; padding:15px; text-align:left; margin-top:5px; margin-bottom:5px; opacity:0.9;'>";
            echo "<p>Description : " .$row["description"]. " &emsp; | &ensp; Beds : " .$row["beds"]. " &emsp; | &ensp; Price per night : " .$row["ppn"]. "€ &emsp; | &ensp; <a href='./rooms/room".$row['id'].".php' style='float:right;'>Book now</a></p>";
            echo "</div>";

        }
    } 
    else {
        echo "0 results";
        //header("location: ./books.php");
    }
    $con->close();
?>

room_id僅在預訂表中,不應在NOT INT之外進行過濾。

$sql = "SELECT id 
         FROM rooms 
          WHERE beds >= ($adults + $children) 
            AND id NOT IN (SELECT room_id FROM reservations WHERE ('{$checkin}' >= checkin AND '{$checkin}' <= checkout) AND room_id is not null) ";

PS:我已經研究過酒店的軟件,關於業務規則,在DB上將成年人和兒童分開放置是很重要的,將來您的系統可能會遇到一些麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM