我有两个表。
主要类别
子类别
表主类别包含类别项目的唯一 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 的情况下执行此操作。?
谢谢
您正在连接 $div_sub 而不将其重置为下一个类别,因此数据会不断添加到您的输出中,并且不断重复。基本上有这个来确保它每次都重新开始(我刚刚在主类别循环中添加了 $div_sub = '';)
$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 => sub_categories),使用它来输出 HTML。
是的,这是可能的。用:
SELECT * FROM sub_category s join main_category m on m.id = s.main_cat_id
您可以使用联接查询
select * from main_category mc,sub_category sc where sc.main_cat_id=mc.cat_id
从这里,你通过循环