[英]Query for hotel reservation
我在酒店预订系统中有三个查询,其中的预订量自动从客房总数中扣除。 我只希望这三个查询全部都包含在一个查询中。 我的查询如下所示:
$p =
在foreach
循环中,其中$p['id']
是每个房间类别的ID ,而$p['qty']
是每个房间类别的最大房间。
$a = $p['id'];
$query = mysql_query("SELECT sum(qty) FROM prereservation where '$arrival' BETWEEN arrival and departure and room_id ='$a' and status = 'active'");
while($rows = mysql_fetch_array($query))
{
$inogbuwin=$rows['sum(qty)'];
}
$query = mysql_query("SELECT sum(qty) FROM prereservation where departure BETWEEN '$arrival' and '$departure' and room_id ='$a' and status = 'active'");
while($rows = mysql_fetch_array($query))
{
$inogbuwin2=$rows['sum(qty)'];
}
$query = mysql_query("SELECT sum(qty) FROM prereservation where '$departure' BETWEEN arrival and departure and room_id ='$a' and status = 'active'");
while($rows = mysql_fetch_array($query))
{
$inogbuwin3=$rows['sum(qty)'];
}
<select>
<option value="0"></option>
<? $counter = 1; ?>
<? while ($counter <= ($p['qty'])-($inogbuwin + $inogbuwin2 + $inogbuwin3)){ ?>
<option value="<?php echo $counter ?>"><?php echo $counter ?></option>
<? $counter++;
}?>
</select>
每次我在这三个查询的范围之间放置一个日期时,扣除的总数也会增加三倍,这就是我希望这三个查询合为一体的原因。
例如我在arrival = 27/10/2012 and departure = 29/10/2012
数据库中有一条记录
并且输入日期在范围内不可用
$arrival = 27/10/2012 and $departure = 29/10/2012
$arrival = 26/10/2012 and $departure = 27/10/2012
$arrival = 29/10/2012 and $departure = 30/10/2012
$arrival = 26/10/2012 and $departure = 30/10/2012
$arrival = 29/10/2012 and $departure = 29/10/2012
因此,在这三个查询中,每个日期也是扣除额,因此我希望这些查询合而为一。 多谢你们
毕竟我修复了错误,但只剩下一个问题。 我只在一个月内确定了预订日期,问题是当到达和离开的输入不在同一个月时,它也不起作用。 这是我的代码再次在下面。
<?
$a = $p['id'];
$query = mysql_query("SELECT
SUM(IF('$arrival' BETWEEN arrival and departure, qty, 0)) AS bu1,
SUM(IF('$departure' BETWEEN arrival and departure, qty, 0)) AS bu2,
SUM(IF(arrival > '$arrival' and departure < '$departure', qty, 0)) AS bu3
FROM prereservation WHERE room_id ='$a' and status = 'active'");
$row = mysql_fetch_array($query);
$test1 = $row['bu1'];
if ($row['bu1'] == $row['bu2']){
$test2 = $row['bu2'] - $row['bu1'];
}else{
$test2 = $row['bu2'];
}
$test3 = $row['bu3'];
?>
<select id="select" name="qty[]" style=" width:50px;" onchange="checkall()">
<option value="0"></option>
<? $counter = 1; ?>
<? while ($counter <= ($p['qty']) - ($test1 + $test2 + $test3)){ ?>
<option value="<?php echo $counter ?>"><?php echo $counter ?></option>
<? $counter++;
}?>
请帮助我如何解决此保留查询,或者也许还有另一种方法可以在php代码中解决此问题。 多谢你们。
最后,我完成并找到了解决方案,这里是:
$a = $p['id'];
$query1 = mysql_query("SELECT DISTINCT id, SUM(qty)
FROM prereservation
WHERE
(
( '$arival1' BETWEEN arrival AND departure ) OR
( '$departure1' BETWEEN arrival AND departure ) OR
( arrival > '$arival1' AND departure < '$departure1' )
)
AND room_id ='$a'
AND STATUS = 'active'");
while($rows1 = mysql_fetch_assoc($query1)){
$set1 = $rows1['SUM(qty)'];
}
?>
<select id="select" name="qty[]" style=" width:50px;" onchange="checkall()">
<option value="0"></option>
<? $counter = 1; ?>
<? while ($counter <= ($p['qty']) - $set1){ ?>
<option value="<?php echo $counter ?>"><?php echo $counter ?></option>
<? $counter++;
}?>
</select>
感谢你们分享您的想法,这个解决方案是您的答案的组合..再次感谢!
您可以这样做:
SELECT
SUM(IF('$arrival' BETWEEN arrival and departure, qty, 0)) AS bu1,
SUM(IF(departure BETWEEN '$arrival' and '$departure', qty, 0)) AS bu2,
SUM(IF('$departure' BETWEEN arrival and departure, qty, 0)) AS bu3
FROM prereservation WHERE room_id ='$a' and status = 'active'"
然后在PHP中:
$query = mysql_query(...);
$row = mysql_fetch_array($query);
$inogbuwin =$row['bu1'];
$inogbuwin2=$row['bu2'];
$inogbuwin3=$row['bu3'];
mysql_free($query);
包括 不鼓励使用 mysql_函数 的常规警告, 您可以通过迁移到PDO
来做得很好
不应使用旧的API,并且有一天将不推荐使用它,最终将其从PHP中删除 。 这是一个流行的扩展,因此这将是一个缓慢的过程,但是强烈建议您使用
mysqli
或PDO_MySQL
编写所有新代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.