2011-07-12 35 views
0

まず、テーブル内を調べて最後の10個のエントリを取得して表示します。出力は期待どおりで、データベースの最後の10個のエントリのリストです。whileステートメント内のselectステートメント

$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個ではなく1個のファイル名しか表示されません。上記のコードから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

whereステートメントで1行だけを選択しているため、2番目のselectステートメントで1行しか持たないようです。

したがって、2番目のステートメントでは行0しか持たないので、最初のループで行0が見つかるだけです。代わりにしてみてください:

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

しかし、11個の別々のクエリを作るinsrtead、一つだけを使用してみてください:mysqlの上に読む

$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>"; 
} 

は、私は、これは構文であるかどうかわからないんだけどhttp://www.keithjbrown.co.uk/vworks/mysql/mysql_p5.php

に参加します正しいですが、それはあなたに正しいアイデアを与える=)

+0

ありがとうございます!あなたはそれを明らかにしたので、今明らかに見えます!笑 –

+0

あなたは歓迎ですが、私が言ったように、それはそれをする素晴らしい方法ではありません!ジョイントを試してみてください。彼らはあなたの人生を楽にします。私はそれらを複雑なCMS構造に使用し、素晴らしい仕事をしています! – Ben

関連する問題