【问题标题】:Create a sub menu from a MySql table with PHP使用 PHP 从 MySql 表创建子菜单
【发布时间】:2018-12-09 07:03:18
【问题描述】:

我有以下数据结构:

|--------|----------|-----------|------------|-----------------|
| NAV_Id | NAV_Name | NAV_Order | NAV_Parent | NAV_ParentOrder |
|--------|----------|-----------|------------|-----------------|
|      1 |     Home |         1 |         no |               0 |
|      2 |   Fruits |         2 |        yes |               0 |
|      3 |   Apples |         2 |         no |               1 |
|      4 |    Pears |         2 |         no |               2 |
|--------|----------|-----------|------------|-----------------|
  • NAV_Order 是我菜单中的导航位置。
  • NAV_Parent 表示该项目是否有子菜单。
  • NAV_ParentOrder是子菜单项的位置顺序。

我想要的输出如下:

<ol class="dd-list">
    <li class="dd-item" data-id="1">
        <div class="dd-handle">Home</div>
    </li>
    <li class="dd-item" data-id="2">
        <div class="dd-handle">Fruits</div>
        <ol class="dd-list">
            <li class="dd-item" data-id="3"><div class="dd-handle">Apples</div></li>
            <li class="dd-item" data-id="4"><div class="dd-handle">Pears</div></li>
        </ol>
    </li>
</ol>

请问如何从我的数据库结构中反映此输出?

这是我实际尝试的:

$query = $pdo->prepare('SELECT * FROM ___Navigation');
$query->execute();

while ($fetch = $query->fetch(PDO::FETCH_ASSOC)) {
    if(NAV_Parent == 0) {
        echo '<li class="dd-item" data-id="'.$fetch[NAV_Id].'"><div class="dd-handle">'.$fetch[NAV_Name].'</div></li>';
    }
    else {
        echo '<li class="dd-item" data-id="'.$fetch[NAV_Id].'"><div class="dd-handle">'.$fetch[NAV_Name].'</div></li>';
        foreach($fetch[NAV_ParentOrder]) {
            echo '<li class="dd-item" data-id="'.$fetch[NAV_Id].'"><div class="dd-handle">'.$fetch[NAV_Name].'</div></li>';
        }
    }
}

但我完全迷路了......

【问题讨论】:

    标签: php


    【解决方案1】:

    怎么样:

    $query = $pdo->prepare('SELECT * FROM ___Navigation WHERE NAV_ParentOrder=0 ORDER BY NAV_Order');
    $query->execute();
    while ($fetch = $query->fetch(PDO::FETCH_ASSOC)) {
        //your parent menu
        print '<li class="dd-item" data-id="' . $fetch[NAV_Id] . '"><div class="dd-handle">' . $fetch[NAV_Name] . '</div></li>';
        $query_child = $pdo->prepare('SELECT * FROM ___Navigation WHERE NAV_ParentOrder !=0 AND NAV_ParentOrder=' . $fetch[NAV_Id] . 'ORDER BY NAV_Order');
        $query_child->execute();
    //child menu
        while ($fetch_child = $query_child->fetch(PDO::FETCH_ASSOC)) {
            print '<ol class="dd-list">';
            print '<li class="dd-item" data-id="' . $fetch_child[NAV_Id] . '"><div class="dd-handle">' . $fetch_child[NAV_Name] . '</div></li>';
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多