我有2个PHP代码执行房间搜索。用户指定号码。床,入住日期和退房日期。第一个代码检索所有具有相应床位数的房间。第二个代码检查房间是否有现有预订,如果有,并且预订日期与房间显示的用户输入日期不冲突,如果没有现有预订则只显示。
我的第一个PHP代码:
$sql = "SELECT rooms.rid, beds, orientation, price FROM rooms
WHERE (beds = $nOfBeds)";
if ($rOrientation != "") {
$sql .= " AND orientation = '$rOrientation'";
}
$results = mysqli_query($conn, $sql)
or die ('Problem with query' . mysqli_error($conn));
我的第二个PHP代码:
<?php
while ($row = mysqli_fetch_array($results)) {
$sql2 = "SELECT rid, checkin, checkout FROM bookings";
$results2 = mysqli_query($conn, $sql2)
or die ('Problem with query' . mysqli_error($conn));
$row2 = mysqli_fetch_array($results2);
if ($row["rid"] == $row2["rid"]) {
if (($cInDate < $row2["checkin"] && $cOutDate <= $row2["checkin"]) ||
(($cInDate >= $row2["checkout"] && $cOutDate > $row2["checkout"]))) {
?>
<tr>
<td><?php echo $row["rid"]?></td>
<td><?php echo $row["beds"]?></td>
<td><?php echo $row["orientation"]?></td>
<td><?php echo $row["price"]?></td>
</tr>
<?php }
}
} ?>
目前它正在过滤冲突日期,但它也过滤掉了没有现有预订的房间。我遇到这个代码的另一个问题是它似乎不适用于具有相同房间ID(rid)的多个预订,所以现在它只是过滤关于第一次预订的日期。
这是我的预订表:http://imgur.com/DGOko1f
这是房间表:http://imgur.com/ED5KFES
答案 0 :(得分:0)
你可以使用,
if($result != NULL) {
// Execute code
} else {
// Give NULL values or error
}
其他方式是if(count($result) > 0)
。
这样您就可以获得无错结果。
答案 1 :(得分:0)
nanjero05
代码有几个方面。在第二个PHP代码中,您将按每个房间执行查询。这不太好,因为它会向数据库生成许多请求。
此外,您正在请求所有预订,然后在内存中过滤与房间相对应的预订。它也不总是货物。您每个房间都会一次又一次地阅读所有预订。
一种解决方案是在第二个查询(第二个PHP代码)中添加一个条件,仅选择当前房间的预订。
$rid = $row["rid"]
$sql2 = "SELECT rid, checkin, checkout FROM bookings where rid = $rid";
(注意:阅读有关SQL注入以改进此内容)
然后你知道如果$ result没有记录,那么房间里就没有预订。
答案 2 :(得分:0)
为什么你需要多个查询尝试这个简单的一行
$sql = "SELECT rooms.rid, beds, orientation, price FROM rooms
WHERE beds = $nOfBeds AND rid NOT IN (SELECT bookings.rid FROM bookings WHERE user_checkin between checkin and checkout or ('user_checkin <= checkin AND user_checkout >= checkout) )";