2014-02-26 241 views
0

我回到PHP和MySQL編碼,我有一個搜索頁,使用2 while while循環返回表中的某些行。PHP while while循環內循環只返回有限行

第一個while循環搜索數據庫,第二個搜索第二個DB查找註冊上的匹配以確定設備的類型。但是,腳本正在工作,但當第一個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); 
+3

1)你沒有連接到再次分貝。 2)你應該考慮使用PDO或mysqli_ *作爲mysql_ *已被棄用 – ElefantPhace

+0

你沒有選擇數據庫在$ connect2,並且@ElefantPhace說,當你回到PHP,更新你的知識,你應該開始使用mysqli或PDO作爲mysql_ *函數已被棄用 – CodeBird

+0

我認爲他的意思是第二張表,不一定是第二個數據庫,但我可能是錯的... – ElefantPhace

回答

0

好的,所以我在這裏看到一些問題。對於一個mysql_fetch_array將返回一個unassociative數組,除非您的系統設置爲返回類型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(); 

此外,如果你能避免嵌套循環Complexity (N * M)又名O(N )。我會重寫SQL語句以使用INNER JOIN一次獲得所有結果。

希望能夠幫助您找到解決方案並幫助腳本更快地運行。

UPDATE

這裏是你的問題的工作代碼。我沒有完全更新,一切以優化它,但是這將建立一個基線爲你:

Files is here

Working Example here

+0

感謝上述,我會給它一個旋轉。 正如我所說的,我已經脫離了編碼循環了一段時間,只是使用了幾年前的一箇舊的舊腳本。我正在使用一個數據庫,但不同的表,再次感謝上述。我會報告回來。 – Jeremy

+0

是的,仍然卡住,因爲它似乎mysqli不工作的權利,但它是在PHP配置。這裏是完整的代碼,刪除了明顯的東西: http://aircraftvideos.net/file.txt – Jeremy

+0

你可以上傳一個SQL轉儲。這將有助於追蹤問題所在。 –