使用数据库值嵌套在php while循环中

使用数据库值嵌套在php while循环中,php,mysql,Php,Mysql,我在数据库(phpmyadmin)中有一个菜单,我用while循环将它输入到我的头中。但是其中一个菜单项有一个下拉列表。如何更改下面的while循环,使其集成子菜单?换句话说,主页、工作原理、博客、关于和联系人仍然作为链接,而服务仍然是一个下拉列表,其中显示了一个单独的while循环,其中包含页面Service1、Service2、Service3…Service nth 这是我到目前为止所做的工作 我的电话接通了 <?php require_once('db/db_database.ph

我在数据库(phpmyadmin)中有一个菜单,我用while循环将它输入到我的头中。但是其中一个菜单项有一个下拉列表。如何更改下面的while循环,使其集成子菜单?换句话说,
主页、工作原理、博客、关于和联系人
仍然作为链接,而
服务
仍然是一个下拉列表,其中显示了一个单独的while循环,其中包含页面
Service1、Service2、Service3…Service nth

这是我到目前为止所做的工作

我的电话接通了

<?php
require_once('db/db_database.php');

// These are menu items Home(id=1), Services(id=2), How It Works(id=3), Blog(id=4), About(id=5), & Contact(id=6)
$sql = " SELECT * FROM menu WHERE id IN (1, 2, 3, 4, 5, 6) ";
$result = $conn->query($sql);


// These are submenu items Svs1(id=10), Svs2(id=20), Svs3(id=30)
$sql2 = " SELECT * FROM menu WHERE id IN (10, 20, 30) ";
$result2 = $conn->query($sql2);
?>

您可以在主菜单循环中使用子菜单循环,并附带条件

 if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        if($row['id'] == 2){ // applies only for services
            echo '<li class="nav-item dropdown active">';
            echo '<a href="#" class="nav-link dropdown-toggle animated fadeIn animation-delay-7" data-toggle="dropdown" data-hover="dropdown" role="button" aria-haspopup="true" aria-expanded="false" data-name="services">';
           echo $row["pagename"];
           echo '<i class="zmdi zmdi-chevron-down"></i>';
           echo '</a>';
           // create a new list
            echo '<ul class="dropdown-menu">';
             // loop second/submenu query results
             while($sub_row = $result2->fetch_assoc()) { 
                echo '<li>';
                echo '<a href="' . $sub_row["link"] . '" class="dropdown-item">' . $sub_row["pagename"] . '</a>';

                echo '</li>';  
             }
             echo "</ul>";
             echo '</li>';   
        }else{ // for all other menu links
            echo '<li class="nav-item dropdown active">';
            echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
            echo '</li>';
        }

    }
} else {
    echo "0 results";
}
if($result->num\u rows>0){
//每行的输出数据
而($row=$result->fetch_assoc()){
如果($row['id']==2){//仅适用于服务
echo'
  • ; 回声'; //创建一个新列表 echo'
      ; //循环第二个/子菜单查询结果 而($sub_row=$result2->fetch_assoc()){ 回音“
    • ”; 回声'; 回音“
    • ”; } 回声“
    ”; 回音“
  • ”; }else{//用于所有其他菜单链接 echo'
  • ; 回声'; 回音“
  • ”; } } }否则{ 回显“0结果”; }
    如果要减少数据库查询,可以使用
    UNION
    将它们连接在一起,然后添加一个虚拟列,以便识别属于哪个查询的行

    大概是这样的:

    SELECT *, 'first' AS query FROM menu WHERE id IN (1, 2, 3, 4, 5, 6) 
    UNION
    SELECT *, 'second' AS query FROM menu WHERE id IN (10, 20, 30)
    
    这将在一个查询中返回所有结果,并在foreach逻辑中使用一个名为
    query
    的额外列


    我可能会命令查询首先返回子菜单结果,而不是使用嵌套的foreach循环。将它的HTML构造成一个变量,然后构造主菜单HTML,只需将子菜单的变量放在当前嵌套循环的位置。

    这没有填充我的子菜单,它将服务菜单创建为另一个链接菜单。请注意与
    li
    关联的类组和属性,这使其成为下拉切换。以及ICO此代码将在服务列表下创建一个新列表。请查看页面源代码,不要忘记包含CSSYE,但它不会打开,因为切换到打开的li中缺少属性。看到我的编辑,我做了3个不同的查询,给了我想要的结果,但它太臃肿了。我想简化一下。你很接近,除了服务的李与菜单中的其他李不同我的回答宾果!令人惊叹的!现在我知道如何处理所有其他需要类似逻辑的东西了。我很感激,伙计。不幸的是,我只能选择一个答案,但我对你的方法感兴趣。为了学习和未来的访问者,是否愿意提供一个工作代码?如果可行的话,我至少会投赞成票
    <?php
        if ($resulthome->num_rows > 0) {
            // output data of each row
            while($row = $resulthome->fetch_assoc()) {
                echo '<li class="nav-item dropdown active">';
                echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
                echo '</li>';
            }
        } else {
            echo "0 results";
        }
    ?>
    <li class="nav-item dropdown active">
        <a href="#" class="nav-link dropdown-toggle animated fadeIn animation-delay-7" data-toggle="dropdown" data-hover="dropdown" role="button" aria-haspopup="true" aria-expanded="false" data-name="services">
            Services
            <i class="zmdi zmdi-chevron-down"></i>
        </a>
        <ul class="dropdown-menu">
            <?php
                if ($result2->num_rows > 0) {
                    // output data of each row
                    while($row = $result2->fetch_assoc()) {
                        echo '<li>';
                        echo '<a href="' . $row["link"] . '" class="dropdown-item">' .  $row["pagename"] . '</a>';
                        echo '</li>';
                    }
                } else {
                    echo "0 results";
                }
            ?>
        </ul>
    </li>
    <?php
        if ($result1->num_rows > 0) {
            // output data of each row
            while($row = $result1->fetch_assoc()) {
                echo '<li class="nav-item dropdown active">';
                echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
                echo '</li>';
            }
        } else {
            echo "0 results";
        }
    ?>
    
     if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            if($row['id'] == 2){ // applies only for services
                echo '<li class="nav-item dropdown active">';
                echo '<a href="#" class="nav-link dropdown-toggle animated fadeIn animation-delay-7" data-toggle="dropdown" data-hover="dropdown" role="button" aria-haspopup="true" aria-expanded="false" data-name="services">';
               echo $row["pagename"];
               echo '<i class="zmdi zmdi-chevron-down"></i>';
               echo '</a>';
               // create a new list
                echo '<ul class="dropdown-menu">';
                 // loop second/submenu query results
                 while($sub_row = $result2->fetch_assoc()) { 
                    echo '<li>';
                    echo '<a href="' . $sub_row["link"] . '" class="dropdown-item">' . $sub_row["pagename"] . '</a>';
    
                    echo '</li>';  
                 }
                 echo "</ul>";
                 echo '</li>';   
            }else{ // for all other menu links
                echo '<li class="nav-item dropdown active">';
                echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
                echo '</li>';
            }
    
        }
    } else {
        echo "0 results";
    }
    
    SELECT *, 'first' AS query FROM menu WHERE id IN (1, 2, 3, 4, 5, 6) 
    UNION
    SELECT *, 'second' AS query FROM menu WHERE id IN (10, 20, 30)