0

使用 MySQL 查询创建了一个值数组后,我需要检查它们是否都至少等于给定值。这是为了检查酒店的客房供应情况。

首先,我执行 MySQL 查询:

foreach( $datearray as $value ) {
$query_avail = "SELECT cupo, ex_cupo.room_id FROM ex_cupo JOIN ex_rooms ON ex_cupo.room_id=ex_rooms.room_id  AND ex_rooms.room_id = '$room_id' AND dt = '$value'";
$avail = mysql_query($query_avail, $MySQL_extranet) or die(mysql_error());
$row_avail = mysql_fetch_assoc($avail);
   $availresult[] = $row_avail['cupo'];
}

“Cupo”是给定日期的可用房间数,因此 $availresult 将是一系列日期内可用房间数的数组。

现在,如果有人想为这些日期预订(比如说)2 个房间,我需要确保数组中的每个值至少为 2。例如,如果范围内有 5 个日期,它们是 2、2、1, 2、2,我需要返回false,但是如果是2、2、2、2、2或2、2、3、2、2,我需要返回true。

我怎么做?(我希望我解释得足够好。)

显然选择 2 只是一个例子。它通常是一个名为 $numrooms 的变量。

4

5 回答 5

4

将 a 添加WHERE cupo > 2到您的 SQL 代码中。让数据库只给你你想要的结果,而不是自己检查结果来检查cupo>2。

如果您需要能够更改它,请使用参数化查询。有关详细信息,请参阅http://php.net/manual/en/security.database.sql-injection.php

于 2012-12-20T22:43:40.393 回答
3
$testArray = array(2,2,2,2,1,2);

$valid = array_reduce(
    $testArray,
    function ($match, $value) {
        return $match && ($value >= 2);
    },
    TRUE
);
var_dump($valid);

编辑

如何通过 $numrooms:

$testArray = array(2,2,2,2,1,2);
$numrooms = 2;

$valid = array_reduce(
    $testArray,
    function ($match, $value) use ($numrooms) {
        return $match && ($value >= $numrooms);
    },
    TRUE
);
var_dump($valid);
于 2012-12-20T22:50:24.110 回答
2

您应该将房间数作为条件传递给您的 sql 语句,例如:

$query_avail = "SELECT cupo, ex_cupo.room_id FROM ex_cupo
  JOIN ex_rooms ON   ex_cupo.room_id=ex_rooms.room_id  AND
    ex_rooms.room_id = '$room_id' AND dt = '$value' WHERE cupo > 1";

因为第一个可能是您的 PHP 传递值。

于 2012-12-20T22:48:45.727 回答
1

如果您可以在 SQL 级别执行此操作(如 Andy 建议的那样),那将是最佳选择。但是,如果您需要在 PHP 中执行此操作,您可以轻松地遍历您的数组,并在任何值低于允许的最小数量时将标志设置为 false:

$minimum_val = 2;
$enough_rooms = true;
foreach($availresult as $item) {
  if ($item < $minimum_val) {
    $enough_rooms = false;
  }
}
于 2012-12-20T22:47:50.873 回答
0

感谢所有回答的人。我想我现在有我的解决方案,我正在努力。圣诞快乐,大家。

于 2012-12-22T11:10:22.750 回答