在while循环mysql中显示结果

时间:2015-01-02 12:23:16

标签: php 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的情况下执行此操作。?

由于

3 个答案:

答案 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

从您通过循环显示的结果