我有两张桌子。
主要类别
子类别
表主类别包含类别项的唯一ID。 表子类别包含与主要类别项目关联的子类别项目。
主要类别项目下可以包含一个或多个子类别项目。我想显示 所有主要类别项目名称及其下面的相关子类别项目名称。但我这样做有问题。这是我的代码:
$main_cat = $db->query("SELECT * FROM main_category");
while($row = $main_cat->fetch_object()){
$main_cat_id = $row->id;
$main_cat_name = $row->name;
$sub_cat = $db->query("SELECT * FROM sub_category WHERE main_cat_id=$main_cat_id");
while($row_subcat = $sub_cat->fetch_object()){
$sub_cat_name = $row_subcat->sub_name;
$div_sub .= '<table>
<th>'.$sub_cat_name.'</th>
</table>';
}
$div_main = '<div id="'.$main_cat_id.'">
<h2>'.$main_cat_name.'</h2>
'.$div_sub.'
</div>';
echo $div_main;
}
它以正确的方式显示第一个div_main
子项目,但从第二个项目开始,它显示当前子项目以及之前的子项目。我是PHP的新手,所以有人可以帮我一点吗?
如果可能,那么如何在不使用2 while循环和仅使用JOIN的情况下执行此操作。?
由于
答案 0 :(得分:1)
您将$ div_sub连接起来而不将其重置为下一个类别,因此数据会不断累加到您的输出并且不断重复。基本上有这个,以确保它每次都开始新鲜(我刚刚添加$ div_sub =&#39;&#39 ;;在主类别循环内)
$main_cat_id = $row->id;
$main_cat_name = $row->name;
$div_sub = '';
要使用一个查询执行此操作,您可以执行此操作:
$main_cat = $db->query("SELECT * FROM sub_category s INNER JOIN main_category m ON (s.main_cat_id = m.id)");
并将其存储在二维数组(main_category =&gt; sub_categories)中,使用它输出HTML。
答案 1 :(得分:0)
是的,可能。 使用:
SELECT * FROM sub_category s join main_category m on m.id = s.main_cat_id
答案 2 :(得分:0)
您可以使用加入查询
select * from main_category mc,sub_category sc where sc.main_cat_id=mc.cat_id
从您通过循环显示的结果