2011-07-12 54 views
0

首先,我编码这个,它看起来在一个表内,得到最后的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; 
        } 

但我不只是需要filenumber。我需要从另一个表的实际文件名和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?

+0

为什么不重写你的SQL和加入? – Luceos

回答

1

看起来你只会在第二条SELECT语句中有1行,因为你只是选择了一行,并使用where语句。

所以,你只会在第二条语句中有第0行,所以它只在第一个循环中找到第0行。尝试,而不是:

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

然而,使11个独立的查询insrtead,请尝试使用只有一个:

$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

我不知道这是否是语法正确的,但它给你正确的想法=)

+0

谢谢!现在看起来很明显,现在你已经明白了!大声笑 –

+0

不客气,但就像我说的那样,这不是一个好办法!尝试加入,他们会让你的生活变得更容易。我将它们用于复杂的cms结构,并且它们非常棒! – Ben