簡體   English   中英

Select 語句內的 while 語句

[英]Select statement within a while statement

首先,我對此進行了編碼,它查看表格內部,獲取最后 10 個條目並顯示它們。 output 符合預期,是數據庫中最后 10 個條目的列表。

$query = "SELECT dfid FROM downloads_downloads ORDER BY did DESC limit 10"; 
$dlresult = mysql_query( $query );
$i=0;
$num = mysql_num_rows ($dlresult);

     while ($i < $num) {
          $dfid= mysql_result($dlresult,$i,"dfid");

          echo "<b>filenumber:</b> $dfid <br>";

          ++$i; 
                  }

但我不僅需要文件號。 我需要另一個表中的實際文件名和 url。 所以我在while語句中添加了一個select語句,使用文件號。

但是由於某種原因,這段代碼只顯示一個文件名而不是 10 個。我知道,從上面的代碼中,它得到了所有 10 個文件號。

$query = "SELECT dfid FROM downloads_downloads ORDER BY did DESC limit 10"; 
$dlresult = mysql_query( $query );
$i=0;
$num = mysql_num_rows ($dlresult);

     while ($i < $num) {
         $dfid= mysql_result($dlresult,$i,"dfid");
         $query2 = "SELECT file_name, file_name_furl FROM downloads_files WHERE file_id = '$dfid'";
         $dlresult2 = mysql_query( $query2 );
         $dlfile_name= mysql_result($dlresult2,$i,"file_name");
         $dlfile_name_furl= mysql_result($dlresult2,$i,"file_name_furl");

         echo "filenumber: $dfid <br>"; //Shows 10, as expected.
         echo "filename: $dlfile_name - $dlfile_name_furl <br>"; //Shows only 1?

         ++$i; 
                  }

我可以手動執行 sql 語句並從表中檢索 file_name 和 file_name_furl。 所以數據是對的。 PHP 不喜歡 while 語句中的 select 嗎?

看起來你只會有 1 行,在你的第二個 select 語句中,因為你只是用你的 where 語句選擇了一行。

因此,您只會在第二條語句中擁有第 0 行,因此它只會在第一個循環中找到第 0 行。 改為嘗試:

$dlfile_name= mysql_result($dlresult2,0,"file_name");
$dlfile_name_furl= mysql_result($dlresult2,0,"file_name_furl");

但是,不要進行 11 個單獨的查詢,而是嘗試只使用一個:

$link = new mysqli(1,2,3,4);

$query = "SELECT downloads_downloads.dfid, downloads_files.file_name, downloads_files.file_name_furl FROM downloads_downloads LEFT OUTER JOIN downloads_files ON downloads_files.file_id = downloads_downloads.dfid ORDER BY downloads_downloads.dfid DESC limit 10;

$result = $link->query($query) ;
if((isset($result->num_rows)) && ($result->num_rows != '')) {
while ($row = $result->fetch_assoc()) {
    echo "filenumber: $row['dfid'] <br>"; 
    echo "filename: $row['file_name'] - $row['file_name_furl'] <br>"; 
}

閱讀 mysql 加入http://www.keithjbrown.co.uk/vworks/mysql/mysql_p5.php

我不確定這是否語法正確,但它給了你正確的想法 =)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM