2013-03-05 60 views
1

我拉一個目錄的主列表和循環,然後嵌套在循環內我拉一組符合每個目錄的筆記。MySQL嵌套表選擇 - 不顯示如果外表不匹配內表

在下面的示例中,我將如何顯示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 |    <---- 
|  |      
----------------------- 
+0

提示:'LEFT JOIN' – Raptor 2013-03-05 10:03:53

+0

備註3&4 NULL或空字符串? – 2013-03-05 18:00:54

回答

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']; 
} 
+0

我覺得可能會讓我困惑的是,在閱讀LEFT JOIN之後,即使某些表列中有空結果,也會顯示結果。我其實不想顯示那些空洞的結果。如果我解釋不好,我很抱歉。儘管你的帖子可能會讓我回答。我會嘗試一下。在http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php這個鏈接上,它顯示了一個簡單的mysql查詢,就在LEFT JOIN示例之前。 – LITguy 2013-03-05 10:22:31

+0

添加了WHERE n.notes IS NOT NULL來糾正查詢。這將消除具有NULL註釋的行 – 2013-03-05 17:58:16

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']; 
     } 
    } 

不過還好在性能方面的做法,我認爲,應該用普里特僧伽的解決方案。

+0

我將對我的帖子進行編輯,對此我表示歉意。這是我困惑的主要原因。正在打印的「dirid」在內部循環之外,所以我不知道如何檢查比賽或是否像你一樣空白。我將編輯我的帖子。 – LITguy 2013-03-05 10:11:45