MySQL嵌套表选择-如果外部表与内部表不匹配,则不显示
我拉一个目录的主列表并循环,然后嵌套在循环中,我拉一组与每个目录匹配的注释 在下面的示例中,如何不显示dir3和dir4清单?这些代表类别的标识,如果结果为空,我不希望这些标识出现。我读了一些关于内部连接的文章,但它似乎不符合这个需要,或者至少我不理解它 为了简化文章,我删除了很多html表和结构。这个想法是,外部循环运行所有目录,但我不能真正检查我所知道的内部循环,看它是否应该被列出。我将通过非常有用的海报阅读下面发布的左连接选项MySQL嵌套表选择-如果外部表与内部表不匹配,则不显示,mysql,select,Mysql,Select,我拉一个目录的主列表并循环,然后嵌套在循环中,我拉一组与每个目录匹配的注释 在下面的示例中,如何不显示dir3和dir4清单?这些代表类别的标识,如果结果为空,我不希望这些标识出现。我读了一些关于内部连接的文章,但它似乎不符合这个需要,或者至少我不理解它 为了简化文章,我删除了很多html表和结构。这个想法是,外部循环运行所有目录,但我不能真正检查我所知道的内部循环,看它是否应该被列出。我将通过非常有用的海报阅读下面发布的左连接选项 $sql_dir="SELECT dirid FROM lit
$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 | <----
| |
-----------------------
试试这个:
$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'];
}
我会推荐你的建议。另一种方法是,如果找不到注释,可以跳过该行
比如说,
$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的解决方案。我将对我的帖子进行编辑,对此我深表歉意。这是我困惑的主要原因。正在打印的dirid在内部循环之外,所以我不知道如何检查匹配项,或者它是否像您那样是空白的。我将编辑我的帖子。我想可能会让我困惑的是,在阅读了左边的JOIN之后,结果似乎会显示出来,即使某些表列上的结果为空。我其实不想显示那些空洞的结果。如果我解释得不好,我道歉。不过,你的帖子可能会让我找到答案。我试试看。在这个链接上,它显示了一个简化的mysql查询,就在左连接示例之前。添加了WHERE n.notes NOT NULL以更正查询。这将消除notes notes 3&4 notes NULL或空字符串的行?