在while语句中选择语句

时间:2011-07-12 15:52:36

标签: php mysql

首先,我编写了这个,它在一个表中查找,获取最后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");

          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 个答案:

答案 0 :(得分:1)

看起来你在第二个选择语句中只会有一行,因为你只是选择一行,并带有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

我不确定这是否语法正确,但它给出了正确的想法=)