![](/img/trans.png)
[英]Can I sort results of SQL query by the number of records in another table?
[英]PHP/SQL How can I make my query include results that has no records in another table yet?
我有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(已取消)的多个预订,因此,现在它仅过滤有关第一次预订的日期。
这是我的预订表: http : //imgur.com/DGOko1f
这是房间表: http : //imgur.com/ED5KFES
您可以使用,
if($result != NULL) {
// Execute code
} else {
// Give NULL values or error
}
其他方法是if(count($result) > 0)
。
这样,您可以获得无错误的结果。
nanjero05
与代码有关的几件事。 在第二个php代码中,您将对每个房间执行查询。 那样不好,因为它将生成许多对数据库的请求。
您还要求所有预订,然后在内存中过滤与房间相对应的预订。 那也不总是商品。 您在每个房间一次又一次地阅读所有预订。
一种解决方案是在第二个查询(第二个php代码)中添加一个条件,以仅选择当前房间的预订。
$rid = $row["rid"]
$sql2 = "SELECT rid, checkin, checkout FROM bookings where rid = $rid";
(注意:请阅读有关SQL注入的信息以改善此问题)
然后,您知道如果$ result没有记录,则表示该房间没有预订。
为什么您需要多个查询,请尝试使用此简单的班轮
$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) )";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.