gpt4 book ai didi

php - While 内部 While 来自不同的 MySQL 表

转载 作者:行者123 更新时间:2023-11-30 01:07:05 25 4
gpt4 key购买 nike

我有 2 张 table :

id,猫名

  • 子目录
  • id、subcat_name、under_cat

    我想制作一个列表,将子类别加载到正确的类别中问题出在第二个循环上,我无法让它工作我做错了什么?

        <?
    $query = "SELECT * FROM `Cat`";
    $result = $mysqli->query($query);
    while ($row = $result->fetch_assoc()){
    echo '<li><a href="#">'
    . $row['cat_name'] .
    '</a><ul>';
    $query2 = "SELECT * FROM `SubCat` WHERE under_cat = '". $row['cat_id'] ."'";
    $result2 = $mysqli->query($query2);
    while ($row2 = $result->fetch_assoc()){
    echo '<li><a href="#">'
    . $row2['subcat_name'] .
    '</a></li>';
    }

    echo '</ul></li>';
    }
    ?>

    编辑:

    enter image description here同一类别的两个列表

    这是代码:

        <?
    $query = "SELECT * FROM Cat LEFT OUTER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;";
    $result = $mysqli->query($query);
    while ($row = $result->fetch_assoc()){
    echo '<li><a href="#">'
    . $row['cat_name'] .
    '</a><ul>';
    if($row['cat_id'] === $row['under_cat']){
    echo '<li><a href="#">'.$row['subcat_name'].'</a></li>';

    }

                echo '</ul></li>';
    }
    ?>

    最佳答案

    我讨厌做 SELECT * 因为它们的维护问题,但要使用你所做的,只需做一个 JOIN:

    "SELECT * FROM Cat LEFT OUTER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;"

    这将返回您想要的结果集,但您需要修改 PHP 来相应地创建列表,如下所示:

    if($row['cat_id'] === $id){
    echo '<li><a href="#">'.$row2['subcat_name'].'</a></li>';
    } else {
    echo '</ul></li><li><a href="#">'.$row['cat_name'].'</a><ul>';
    iF(!empty($row['subcat_name'])){
    echo '<li><a href="#">'.$row['subcat_name'].'</a></li>';
    }
    }

    $id = $row['cat_id'];

    如果项目与前一个条目相同,则将其添加到列表中,否则将启动一个新列表。 !empty 是处理 NULL 的快速尝试,例如没有从 SubCat 返回的匹配项,但在 Cat 中有条目。如果永远不会出现这种情况,您可以消除 if 语句并将查询转换为:

    "SELECT * FROM Cat INNER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;"

    为什么要经历你问的所有这些努力?因为这将提供您想要的结果集,而只需查询一次。您之前构建的方式会查询无数次,这会杀死服务器并大大降低性能。

    希望这对您的问题和整体实现知识都有帮助。

    关于php - While 内部 While 来自不同的 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19669991/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com