PHP while 循环内的 while 循环仅返回有限的行

标签 php mysql

我正在重新开始 PHP 和 MySQL 编码,我有一个搜索页面,它使用 2 个 while 循环返回表中的某些行。

第一个 while 循环搜索数据库,第二个循环搜索第二个数据库以查找注册的匹配项,以确定设备的类型。脚本正在运行,但是,当第一个 while 循环返回超过 2 个结果时,第二个 while 循环仅在设备上显示前 2 个返回,欢迎任何帮助。

$connect = mysql_connect("$dbhost", "$dbuname", "$dbpass") or die("Couldn't connect.");
$db = mysql_select_db($db_name, $connect) or die("Couldn't select database.");
$query = "SELECT * FROM `db1` WHERE `dest_id` =$ap ORDER BY video_date DESC, operator_name, operator_tail ASC";
$result = mysql_query($query,$connect) or mysql_error();

while ($r = mysql_fetch_array($result)) {
    $row_color = ($row_count % 2) ? $color1 : $color2;
    $time_update = $r[video_date];
    $str_time = date('M. d, Y', $time_update);

    echo ("<tr><td bgcolor='$row_color'>&nbsp;<a href='$server?al=$r[operator_id]'>$r[operator_name]</a>
           </td><td bgcolor='$row_color' align='center'>&nbsp;<a href='$r[operator_ICAO]$r[flight_num]' target='_blank'>$r[flight_num]</a>
           </td><td bgcolor='$row_color'>&nbsp;<a href='$r[operator_tail]' target='_blank'>$r[operator_tail]</a>
           </td><td bgcolor='$row_color' align='center'>&nbsp;<a href='$r[video_url]' target='_blank'>$r[video_url]</a>
           </td><td bgcolor='$row_color' align='center'>");

    $connect2 = mysql_connect("$dbhost", "$dbuname", "$dbpass") or die("Couldn't connect.");
    $query2 = "SELECT * FROM `plane` WHERE `plane_id` =$r[plane_id]";
    $result2 = mysql_query($query2,$connect2) or mysql_error();

    while ($q = mysql_fetch_array($result2)) {
        echo ("&nbsp;$q[plane_type]");
    }

    mysql_close($connect2);
    echo (" </td><td bgcolor='$row_color' align='center'>&nbsp;$str_time
            </td><td bgcolor='$row_color' align='center'>&nbsp;<a href='$server?ap=$r[dest_id]'>$r[dest_name]
            </td><td bgcolor='$row_color' align='center'>&nbsp;$r[vtype_name]
            </td> </tr>");
    $row_count++;
}
mysql_close($connect);

最佳答案

好的,我在这里看到了一些问题。对于一个 mysql_fetch_array 将返回一个非关联数组,除非您的系统设置为返回类型 MYSQL_BOTH。我建议将脚本重写为 mysqli,如下所示:

<?php
$connect = new mysqli("$dbhost", "$dbuname", "$dbpass","$db_name");
$connect->connect_errno ? die("Couldn't connect.") : null ;

$query = "SELECT * FROM `db1` WHERE `dest_id` =$ap ORDER BY video_date DESC, operator_name, operator_tail ASC";
$result = $connect->query($query);

if(!$results->errno):

while ($r = mysql_fetch_array($result)) {
    $row_color = ($row_count % 2) ? $color1 : $color2;
    $time_update = $r[video_date];
    $str_time = date('M. d, Y', $time_update);

    echo ("<tr><td bgcolor='$row_color'>&nbsp;<a href='$server?al=$r[operator_id]'>$r[operator_name]</a>
           </td><td bgcolor='$row_color' align='center'>&nbsp;<a href='$r[operator_ICAO]$r[flight_num]' target='_blank'>$r[flight_num]</a>
           </td><td bgcolor='$row_color'>&nbsp;<a href='$r[operator_tail]' target='_blank'>$r[operator_tail]</a>
           </td><td bgcolor='$row_color' align='center'>&nbsp;<a href='$r[video_url]' target='_blank'>$r[video_url]</a>
           </td><td bgcolor='$row_color' align='center'>");

    $query = "SELECT * FROM `plane` WHERE `plane_id` =$r[plane_id]";

    if($result2 = $connect->query($query)):
        while ($q = $result2->fetch_assoc($result2)) {
            echo ("&nbsp;$q[plane_type]");
        }

        echo (" </td><td bgcolor='$row_color' align='center'>&nbsp;$str_time
                </td><td bgcolor='$row_color' align='center'>&nbsp;<a href='$server?ap=$r[dest_id]'>$r[dest_name]
                </td><td bgcolor='$row_color' align='center'>&nbsp;$r[vtype_name]
                </td> </tr>");
        $row_count++;
    endif;
}
endif;
$connect->close();

此外,如果您可以避免嵌套循环复杂度 (N * M) 又名 O(N2) 。我会重写 SQL 语句以使用 INNER JOIN 一次性获取所有结果。

希望能帮助您找到解决方案并帮助您的脚本运行得更快。

更新

这是适用于您的问题的代码。我没有完全更新所有内容来优化它,但这将为您建立一个基线:

Files is here

Working Example here

关于PHP while 循环内的 while 循环仅返回有限的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22054483/

相关文章:

php - 如何从 php 文件在 Linux 中执行终端脚本

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

mysql - SQLSTATE[42S22] : Column not found: 1054 Unknown column 'adjusted_amount' in 'field list'

mysql - mysql中的group by和order by

mysql - 未在 3 个表连接上显示 DISTINCT 记录

php - Laravel 4:迁移 - Schema::table - 文本列自动创建主唯一索引

php - 如何从 mysql 表格单元格中检索数据并将其放入 php 中的变量中?

javascript - Ajax 文件上传 - 脚本在文件中写入垃圾

php - 将项目从 windows-1256 转换为 utf-8 字符集,正确的步骤是什么?

mysql - 试图将 Pandas 数据帧传输到 mySQL 数据集