Php 从ID不在另一个查询中的房间中选择ID+(日期比较)

Php 从ID不在另一个查询中的房间中选择ID+(日期比较),php,mysql,Php,Mysql,我有两张桌子、两个房间和两个预订处 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

我有两张桌子、两个房间和两个预订处

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 结果是整张表都有我输入的日期

有人知道怎么回事吗

样品

User input Checkin : 6-5-2017 Checkout : 8-5-2017 Adults : 1 Children : 0 我应该有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();
?>

房间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上区分成人和儿童床很重要,将来您的系统可能会遇到一些问题。

您想要什么?编辑您的问题,并提供示例数据和所需结果。对不起,我没有复制粘贴我的数据库名称我在这里写的,我犯了一个错误,它在我的数据库中是正确的。谢谢提示,但这只是一个学校项目,所以没什么大不了的!向我们展示您的表格结果,让我们了解其中的数据
$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) ";