【问题标题】:Fetch subcategory in fetched category获取已获取类别中的子类别
【发布时间】:2015-08-14 07:34:16
【问题描述】:

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

这是表结构。

子类别表

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

分类表

|编号 |类别 |

id_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>

【问题讨论】:

    标签: php html mysql pdo


    【解决方案1】:

    我认为您只是不了解 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>
    

    【讨论】:

    • 如果没有问题,您可以编辑我的代码吗?我正在尝试,但无法正常工作。它可以这样工作吗?
    • 谢谢,它看起来很有希望,但仍然不起作用,没有错误,它只是不显示子类别
    • 我已经编辑过,所以也许您需要将行作为关联数组获取,也许这就是问题所在。如果不是可能不是 SQL 问题 (?)
    • 好吧还是不行,同样的事情。没有错误只是不显示任何内容。一切看起来都很好,查询工作正常,还有什么问题……我没有发现任何问题?
    • 您能展示一下您的表格结构吗?你确定subcategory.id_category 匹配category.category 吗?会不会是category.id?这会将WHERE 子句留在循环中,如下所示:WHERE id_category = '".$rs['id']."'";
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多