php - MySQL 中的动态导航菜单,PDO 显示一个实例

标签 php mysql

我正在为一个项目构建动态导航,我只想显示具有城市parent_id的国家,并且如果超过一个城市(例如:曼谷),也只显示一个城市实例(例如:曼谷)一个。

注意:中国没有 parent_id,所以这是不显示的。

不确定此设置是否可行,但我们开始吧。

这是包含四列的数据库表,idAUTO_INCRMENT

id  | menu      | parent_id | type
----|-----------|-----------|------
1   | China     | 0         | null
2   | Myanmar   | 0         | null
3   | Laos      | 0         | null
4   | Thailand  | 0         | null
5   | Yangon    | 2         | Tour
6   | Champasak | 3         | Tour
7   | Pakse     | 3         | Tour
8   | Bangkok   | 4         | Tour
9   | Bangkok   | 4         | Tour
10  | Bangkok   | 4         | Tour

这是实例化 class 的 HTML 片段

<li class="dropdown">
    <a class="dropdown-toggle" href="#">TOURS</a>
    <?php
    $menu = new DynamicNavigation();
    $menu->navigationTourMenu();
    ?>
</li>

这是

class DynamicNavigation {

    public function navigationTourMenu() {
        $sql = DB::getInstance()->query('SELECT * FROM navigation');

        if($sql->count()) {
            $rows = $sql->results();
        }

        $items  = $rows;
        $id     = '';

        echo '<ul class="dropdown-menu">';
            foreach($items as $item) {
                if($item->parent_id == 0) {
                    echo '<li class="dropdown">';
                        echo '<a class="dropdown-toggle" href="#"><i class="fa fa-thumb-tack"></i> ' . $item->menu . '</a>';
                        $id = $item->id;
                        $this->navigationTourSubMenu($items, $id);
                    echo '</li>';
                }
            }
        echo '</ul>';
    }

    public function navigationTourSubMenu($items, $id) {
        echo '<ul class="dropdown-menu">';
            foreach($items as $item) {
                if($item->parent_id == $id && $item->type == 'Tour') {
                    echo '<li>';
                        echo '<a href="' . BASE_URL . '/search?searching=' . $item->menu . '" onClick="showProgress()"><i class="fa fa-street-view"></i> ' . $item->menu . '</a>';
                        $this->navigationTourSubMenu($items, $item->id);
                    echo '</li>';
                }
            }
        echo '</ul>';
    }

}

那么是否有一个查询可以在此设置中执行此操作。由于我不是 MySQL 专家,因此我们将非常乐意提供任何帮助

最佳答案

试试你的这个sql

SELECT distinct(nav.menu), nav.id, nav.parent_id, nav.type 
FROM navigation nav
group by  nav.menu ,  nav.parent_id, nav.type 
order by nav.parent_id 

关于php - MySQL 中的动态导航菜单,PDO 显示一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37788363/

相关文章:

php - CakePHP:表名和其他限制是什么

mysql - COUNT(*) 在 GROUP BY 子句之前返回行数?

php - 从文本文件或数据库中获取?

php - 将目录移出到 .htaccess 文件是否会增加 CPU 加载时间和 CPU 周期

PHP MySQLi - 检查用户权限

php - 如何使用 yii2 basic 配置 adminlte?

Mysql 选择最后一个 id 与 COUNT(*)

mysql - bash - 从 mysql 表中提取数据(GROUP BY) - 如何处理

php - 如何在我的本地计算机(Ubuntu)上测试 php 代码?

javascript - setInterval() 妨碍了 UI 的用户友好性,有解决办法吗?