当前位置: 首页 > 知识库问答 >
问题:

从mysql获取主类别的子类别

丁翊歌
2023-03-14

我在从mysql数据库检索子类别时遇到一些问题。我想显示父类别的子类别。我只能得到主类别的最后一个子类别。第一个子类别不显示**。在我的表**中,我有类别\u id和类别\u父\u id。其中类别\u父\u id对于父类别将为“0”。提前谢谢

 <ul class="betterList">
 <?php 
        $con = mysql_connect("localhost","root","pwd") or die('couldnot connect to database'.mysql_error());
               mysql_select_db("DB",$con);
               $result=mysql_query("select * from table ")or die("No table available with this name"."<br/><br/>".mysql_error());
             while($row=mysql_fetch_array($result))
               {
                $parent_id=$row['category_parent_id'];
                $category_id=$row['category_id'];
                if($parent_id==0)

                {
?>
                <li>
                <?php echo $row['category_id'].$row['name_en-GB'];

                $result1=mysql_query("select * from table where category_parent_id=".$category_id)or die("No data available with this name"."<br/><br/>".mysql_error());
                 echo  $num_row    = mysql_num_rows($result1);

                    if($num_row>0) {
                        for($i=0;$i<$num_row;$i++)
                        {
                             while($row1=mysql_fetch_array($result1))
                             {

                  ?>
                                     <ul style="margin:0px;padding:0;">
                                        <li><?php echo $row1['name_en-GB']?></li>
                                     </ul>
                                     <?php
                             }
                        }
                    }

                ?>


                </li>

                <?php } ?>



    <?php }?> 
 </ul>

当我删除


共有3个答案

云景焕
2023-03-14
匿名用户

不要执行嵌套循环,而是使用联接获取所有内容:

SELECT t1.category_id parent, t1.`name_en-GB` parent_name,
       t2.category_id child, t2.`name_en-GB` child_name
FROM table t1
JOIN table t2 ON t2.parent_category_id = t1.category_id
WHERE t1.parent_category_id = 0

那么您的循环将是:

$last_parent = null;
$first_cat = true;
while ($row = mysql_fetch_assoc($result)) {
    if ($row['parent'] != $last_parent) {
        $last_parent = $row['parent'];
        if (!$first_cat) { // Close out the last UL and LI
            echo '</ul></li>';
        } else {
            $first_cat = false;
        }
        echo '<li>' . $row['parent'] . $row['parent_name'];
        echo '<ul style="margin:0px;padding:0;">';
    }
    echo '<li>' . $row['child_name'] . </li>
}
if (!$first_cat) {
    echo '</ul></li>';
}

您的代码中有太多嵌套循环:您有一个用于和,而循环都试图循环内部查询的行。此外,您还将每个孩子放入自己的代码中

顾光明
2023-03-14

哇!o_O您正在使用旧的mysql_*函数...

你写了:for($i=0;$i

之后:while($row1=mysql\u fetch\u array($result1))

这两条指令都在使用此查询得到的每一行上循环。

删除所有这些:

echo  $num_row    = mysql_num_rows($result1);

if($num_row>0) {
    for($i=0;$i<$num_row;$i++) {

因为这是无用的。

在结果上循环的唯一重要的事情是同时($row1=mysql_fetch_array($product1))

您还可以用更轻的mysql\u fetch\u assoc()替换mysql\u fetch\u array()。

您的代码将是可优化的,但这将解决您的问题。

赏阳嘉
2023-03-14

请删除以下内容,然后重试:

for($i=0;$i<$num_row;$i++)
{
 类似资料:
  • 我有一张桌子在下面。我想获取父级所在的所有类别。 当我通过id=4时,它应该给出以下结果 但它给出了总体表的一般结果。我只需要那些id=4的记录。查询只给出2条记录测试4

  • 我试图在WooCommerce的子类别页面中查找父类别名称,即我有4个主要类别。 父母1 子1 子2 子3等 父母2 子1 子2 子3等 等等。 如果我在Sub2的列表页上,Sub2是Parent1的子级,我想知道Parent1类别的名称。

  • 我想在前端获得所有woocommerce类别的子类别,结果如下: 这是我所拥有的(但不是我想要的): 这段代码显示了类别和子类别,但是子类别不在应该在的地方,子类别就像这样的单独链接:

  • 有一个类别,具有以下(重要)属性: 我正在尝试实现类别/子类别的概念。一个类别可以有零个或多个子类别。一个类别只能有一个父类别(可以为null)。对于顶级类别,parentCategory=null。 现在,我有一个所有类别的列表,

  • 我目前有一个代码片段,其中对于每个类别,它将找到子类别: 将递归获取一个类别的子级: 目前,使用,只检索子类别的子类别,因此如果每个子类别都有自己的子类别,则不会将其保存到子类别中。 我如何显示子子类别给我们的子类别? 我想用我的代码做的是获取一个父级,获取它的子级,然后将这些子级中的每一个视为父级,递归地获取它的子级,但是我的JSON输出并没有反映这一点。只有父对象有子对象-子对象没有子对象(尽

  • 我试图在一个页面上显示来自两个类别的帖子(6) 我将如何将类别ID“7”添加到该代码中,以使所有内容都像上面解释的那样工作?提前谢谢!