Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 以数组形式返回SQL查询_Php - Fatal编程技术网

Php 以数组形式返回SQL查询

Php 以数组形式返回SQL查询,php,Php,reserva\u disponibilidade返回相同的数组(29),何时应该返回…29,30,31。。。 有办法解决这个问题吗 function estoque($data, $dias, $tipo) { //Ajusta a data... $inicio = strtotime($data); $edia = date('d', $inicio); $emes = date('m', $inicio);

reserva\u disponibilidade返回相同的数组(29),何时应该返回…29,30,31。。。 有办法解决这个问题吗

    function estoque($data, $dias, $tipo) {

        //Ajusta a data...
        $inicio = strtotime($data);
        $edia = date('d', $inicio); 
        $emes = date('m', $inicio);
        $eano = date('Y', $inicio);

        //Conecta ao db...
        $db = new DBConfig();
        $db->config();
        $db->conn();

        //Arrays
        $smarty_array = array();
        $smarty_data_array = array();

        $query_quartos = mysql_query("SELECT * FROM quartos AS quartos 
                                        INNER JOIN tipos AS tipos 
                                        LEFT JOIN reservas AS reservas 
                                        ON quartos.quarto_tipo = tipos.tipo_id
                                        AND quartos.quarto_numero = reservas.reserva_quarto_id
                                        WHERE quartos.quarto_tipo = '".$tipo."'
                                        GROUP BY quartos.quarto_id HAVING Count(*) >= 1") or die(mysql_error());
        while($row = mysql_fetch_assoc($query_quartos)){
            $quartoid = $row["quarto_id"];

            while($i <= $dias) {
                $today = strtotime(date('Y-m-d',mktime(0,0,0,date($emes),date($edia)+$i,date($eano))));
                $query = mysql_query("SELECT * FROM quartos AS quartos 
                              LEFT JOIN reservas AS reservas 
                              ON quartos.quarto_numero = reservas.reserva_quarto_id
                              AND ".$today." BETWEEN reservas.reserva_checkin AND reservas.reserva_checkout
                              WHERE quartos.quarto_id = '".$quartoid."'
                              GROUP BY quartos.quarto_id HAVING Count(*) >= 1") or die(mysql_error());
                while($rowe = mysql_fetch_assoc($query)){
                    if (empty($rowe["reserva_status"])) {
                        $rowe["reserva_status"] = "0";
                    }
                    $smarty_data_array[] = $rowe["reserva_status"];
                }
                $i++;
            }

            $row["reserva_disponibilidade"] = $smarty_data_array;
            $smarty_array[] = $row;
        }

        $db->close();
        return $smarty_array;
    }

这里的问题在于为$quartoid赋值的时间。如果只看这段代码:

while($row = mysql_fetch_assoc($query_quartos)){
        $quartoid = $row["quarto_id"];

        while($i <= $dias) {
            $today = strtotime(date('Y-m-d',mktime(0,0,0,date($emes),date($edia)+$i,date($eano))));
            $query = mysql_query("SELECT * FROM quartos AS quartos 
                          LEFT JOIN reservas AS reservas 
                          ON quartos.quarto_numero = reservas.reserva_quarto_id
                          AND ".$today." BETWEEN reservas.reserva_checkin AND reservas.reserva_checkout
                          WHERE quartos.quarto_id = '".$quartoid."'
                          GROUP BY quartos.quarto_id HAVING Count(*) >= 1") or die(mysql_error());
            while($rowe = mysql_fetch_assoc($query)){
                if (empty($rowe["reserva_status"])) {
                    $rowe["reserva_status"] = "0";
                }
                $smarty_data_array[] = $rowe["reserva_status"];
            }
            $i++;
        }
while($row=mysql\u fetch\u assoc($query\u quartos)){
$quartoid=$row[“quarto_id”];

然而,太长了,读不下去了,不管怎样,这是什么:<代码> $RO[ [ RealvaDeSosiBidiIDe] ]=$smarty_data_array;
它们是否应该反转?这样,您就可以将$row键分配给整个smart_data_array。。如果我错了,我有点累了,有点困了。LOLI认为这是正确的,数据返回正确,但正在重复……我想说的一件事是,将SQL查询操作放入循环中?如果可以避免的话,这是个坏主意。同上用于时间戳生成逻辑。时间戳没有(或至少不应该)在循环过程中进行更改,因此您可以在进入循环之前只生成一次。至于SQL查询,使用IN而不是=意味着您可以匹配字段的值列表,而不是单个值。您可以使用循环来构建列表,然后运行单个查询来获取所有数据。这几乎肯定会快得多。我没有sucess之前只需要一个查询,但这是一个好主意。
while($row = mysql_fetch_assoc($query_quartos)){
        $quartoid = $row["quarto_id"];

        while($i <= $dias) {
            $today = strtotime(date('Y-m-d',mktime(0,0,0,date($emes),date($edia)+$i,date($eano))));
            $query = mysql_query("SELECT * FROM quartos AS quartos 
                          LEFT JOIN reservas AS reservas 
                          ON quartos.quarto_numero = reservas.reserva_quarto_id
                          AND ".$today." BETWEEN reservas.reserva_checkin AND reservas.reserva_checkout
                          WHERE quartos.quarto_id = '".$quartoid."'
                          GROUP BY quartos.quarto_id HAVING Count(*) >= 1") or die(mysql_error());
            while($rowe = mysql_fetch_assoc($query)){
                if (empty($rowe["reserva_status"])) {
                    $rowe["reserva_status"] = "0";
                }
                $smarty_data_array[] = $rowe["reserva_status"];
            }
            $i++;
        }