【问题标题】:Getting sub categories from mysql for the main category从mysql获取子类别作为主类别
【发布时间】:2013-10-07 12:11:12
【问题描述】:

我在从 mysql 数据库中检索子类别时遇到一些问题。我想显示父类别的子类别。我只能获取主类别的最后一个子类别。第一个子类别不显示**。在我的表中**我有 category_id 和 category_parent_id。对于父类别,category_parent_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>

当我删除位于末尾的&lt;li&gt; 标记并将其保留在末尾时,我可以显示所有子类别,但 css 不适用。那里出了点问题,但我无法弄清楚

【问题讨论】:

  • $num_row 的结果是什么?
  • 它给出了该主类别的子类别的数量。
  • 是的,我问的是行数
  • 首先从最小值开始,所以请先添加一个 break 关键字。我的意思是类别,而
  • 这在浏览器中显示了什么 echo $num_row = mysql_num_rows($result1);

标签: php mysql


【解决方案1】:

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

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

【讨论】:

  • 即使在删除后也给出相同的结果
【解决方案2】:

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

你写道: for($i=0;$i&lt;$num_row;$i++)

之后: while($row1=mysql_fetch_array($result1))

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

删除所有这些:

echo  $num_row    = mysql_num_rows($result1);

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

因为这没用。

对结果进行循环的唯一重要的事情是 while($row1=mysql_fetch_array($result1))

你也可以用更轻的mysql_fetch_assoc()替换mysql_fetch_array()。

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

【讨论】:

  • 我删除了它,但它给出了相同的输出。
【解决方案3】:

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

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>';
}

您的代码中有太多嵌套循环:您有一个 forwhile 循环,它们都试图循环内部查询的行。此外,您将每个孩子都放入了自己的&lt;ul&gt;,这可能不是您想要的。

【讨论】:

  • category_id 和 category_parent_id 在同一张表中
  • 我知道。当您将表与自身连接时,这通常称为自连接。
【解决方案4】:

试试这个解决方案是否适合你,如果有效,请相应地调整你的代码

        $result = mysql_query("select * from table WHERE category_parent_id = 0 ");

        while($row=mysql_fetch_array($result)) {

            $parent_id = $row['category_parent_id'];
            $query = mysql_query("select * from table where category_parent_id = {$parent_id}");

            while($sub_cats=mysql_fetch_array($query)) {
                echo '<pre>'.print_r($sub_cats).'</pre>';
            }

        } 

【讨论】:

    【解决方案5】:

    只需在 while 循环之前添加内部 &lt;ul&gt; 即可获得子类别。

            <?php 
              echo "<ul>";
              while($row1=mysql_fetch_array($result1))
                 {
             ?>
                   <li><?php echo $row1['name_en-GB']?></li>
                    <?php
                 }
                    echo " </ul>";
    

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 2015-08-14
      相关资源
      最近更新 更多