1

ディレクトリのメイン リストをプルしてループし、ループ内にネストして、各ディレクトリに一致する一連のメモをプルしています。

以下の例では、dir 3 と dir 4 のリストを表示しないにはどうすればよいでしょうか? これらはカテゴリのロゴを表し、結果が空の場合、それらのロゴを表示したくありません。INNER JOIN を読みましたが、このニーズに一致しないか、少なくとも理解できませんでした。

投稿を簡素化するために、多くの html テーブルと構造を削除しました。アイデアは、外側のループがすべてのディレクトリを実行するということですが、(私が知っている)内側のループを実際にチェックして、リストする必要があるかどうかを確認することはできません。非常に役立つポスターによって以下に投稿された LEFT JOIN オプションを読みます。

$sql_dir="SELECT dirid FROM lit_directories";
$result_dir=mysql_query($sql_dir);
   while ($row_dir=mysql_fetch_assoc($result_dir)) {
edit here-->  echo $row_dir['dirid'];

   $sql_notes="SELECT notes, dirid FROM lit_notes WHERE dirid='".$row_dir['dirid']."'";
   $result_notes=mysql_query($sql_notes);
      while ($row_notes=mysql_fetch_assoc($result_notes)) {
         echo $row_notes['notes'];
      }
   }

  dirid   notes
-----------------------
| dir 1 | notes 1
|       | notes 2
|       | notes 3
-----------------------
| dir 2 | notes 1
|       | notes 2
-----------------------
| dir 3 |               <---- I don't want these last 2 dir lists to show
|       |                     since they are empty
-----------------------
| dir 4 |               <---- 
|       |                     
-----------------------
4

2 に答える 2

2

これを試して:

$sql_dir="SELECT l.dirid, notes FROM lit_directories l LEFT JOIN lit_notes n  ON n.dirid = l.dirid WHERE n.notes IS NOT NULL";
$result_dir=mysql_query($sql_dir);
while ($row_dir=mysql_fetch_assoc($result_dir)) {
      echo $row_notes['notes'];
}  
于 2013-03-05T10:06:48.177 に答える
0

Preet Sanghaが提案したことをお勧めします。または、メモが見つからない場合は行をスキップできます。

例えば、

$sql_dir="SELECT dirid FROM lit_directories";
$result_dir=mysql_query($sql_dir);
   while ($row_dir=mysql_fetch_assoc($result_dir)) {

   $sql_notes="SELECT notes, dirid FROM lit_notes WHERE dirid='".$row_dir['dirid']."'";
   $result_notes=mysql_query($sql_notes);
      while ($row_notes=mysql_fetch_assoc($result_notes)) {
         if($row_notes['notes'] == ''){
             continue;
         }
         echo $row_notes['notes'];
      }
   }

しかし、パフォーマンスの観点からは、Preet Sangha のソリューションを使用する必要があると思います。

于 2013-03-05T10:10:10.860 に答える