在 while 循环 mysql 中显示结果


Displaying results within while loop mysql

我有两个表。

主要类别

子类别

表主类别包含类别项目的唯一 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

从这里,你通过循环