php - 在获取的类别中获取子类别

标签 php html mysql pdo

下一步是我要构建的。获取我所有的菜单类别并显示它们,然后获取每个特殊类别的所有子类别也都显示它。我希望你明白我想说什么。我迷失在代码中,现在不知道该怎么做。这是我的代码,希望你能帮助我。

这是表结构。

子类表

|编号 |子类别名称 | id_类别 |

分类表

|编号 |类别 |

id_category与category表中的id关联

<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav navbar-left">
        <?php
          $pdo = connect();             
          $sql = "SELECT * FROM category";
          $query = $pdo->prepare($sql);
          $query->execute();
          $row = $query->fetchAll();      

          foreach ($row as $rs) { ?>

            <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><?php echo $rs['category'] ?><span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <?php
                $sql = "SELECT subcategory.subcategory_name, subcategory.id_category, category.id, category.category
                        FROM subcategory
                        INNER JOIN category
                        WHERE subcategory.id_category = category.category";
                $query = $pdo->prepare($sql);
                $query->execute();
                $subcat = $query->fetchAll();      

                foreach ($subcat as $sub) { ?>

                <li><a href="#"><?php echo $sub['subcategory_name'] ?></a></li>

                <?php } ?>

              </ul>  
            </li>

          <?php } ?>
      </ul>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="includes/logout.php">Logout</a></li>
      </ul>
      </div><!-- /.navbar-collapse -->
    </div>

最佳答案

我想你只是没有理解 INNER JOIN sql select 语句。您必须声明第二个表与第一个表的关系:

SELECT column_list
FROM t1
INNER JOIN t2 ON join_condition1
WHERE where_conditions;

在您要放置查询的“subcategory.id_category = category.category”部分的位置加入条件。也许省略实际的 WHERE 子句? 希望能帮助到你。 看here

编辑: 我提出的建议是重写完整的代码以在一个查询中完成。但是您的代码可以像这样使用第一个 sql 查询捕获的变量快速简化:

<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav navbar-left">
        <?php
          $pdo = connect();             
          $sql = "SELECT * FROM category";
          $query = $pdo->prepare($sql);
          $query->execute();
          $row = $query->fetchAll(PDO::FETCH_ASSOC);      

          foreach ($row as $rs) { ?>

            <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><?php echo $rs['category'] ?><span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <?php
                $sql = "SELECT subcategory_name, id_category
                        FROM subcategory
                        WHERE id_category = '".$rs['id']."'";
                $query = $pdo->prepare($sql);
                $query->execute();
                $subcat = $query->fetchAll(PDO::FETCH_ASSOC);      

                foreach ($subcat as $sub) { ?>

                <li><a href="#"><?php echo $sub['subcategory_name'] ?></a></li>

                <?php } ?>

              </ul>  
            </li>

          <?php } ?>
      </ul>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="includes/logout.php">Logout</a></li>
      </ul>
      </div><!-- /.navbar-collapse -->
    </div>

关于php - 在获取的类别中获取子类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30563382/

相关文章:

php - MySQL 在查询中运行查询

php - 更新正确输入的代码的枚举值

javascript - 使用本地存储从表单发布和获取数据

jquery - 将灰度滤镜应用于 div

php - 找出两个人是否拥有相同的IP地址php和sql

php - while{while{code}} 无法正常工作

php - PDO 中是​​否有 MySQL 的 "multi_query()"的等效项?

php - Laravel token 签名无法验证

javascript - 如何从第一个下拉列表的 onchange 填充 2 个文本框和 1 个下拉列表

mysql - 填充部分填充的表 MYSQL