2017-05-29 54 views
0

我有两张桌子,房间和预订。从ID未在其他查询中的房间中选择ID +(日期比较)

 
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(); 
?> 
+0

你想要什么?编辑您的问题并提供样本数据和期望的结果。 –

回答

1

ROOM_ID仅在预订表,你不应该在不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分开儿童床大人,您在未来的系统能够遇到一些麻烦是非常重要的。

+0

对不起,我没有复制粘贴我的数据库名称我写在这里,我犯了一个错误,这是在我的数据库中是正确的。 – Stelios

+0

@Stelios没关系,我编辑了 – calexandre

+0

感谢您的提示,但这只是一个学校项目,所以没什么大不了的! – Stelios