PHP / SQL动态菜单取决于不同的表

时间:2016-08-21 12:58:18

标签: javascript php jquery mysql css

我正在尝试根据数据库中表格的结果来管理动态菜单。

以下代码到目前为止我已经来了..但我无法按照我想要的那样显示它。

我的数据库中有3个表就像这样。

ws_categories

  • ID
  • maincat(主要类别的名称)

ws_subcategories

  • ID
  • subcat(子类别名称)
  • parentcat(主要类别的ID)

ws_subsubs

  • ID
  • subsub(第二子类别的名称)
  • parentsub(子类别的ID)

我想达到什么目标? 有一个简单的垂直菜单,输出主要类别,以及onclick,与该主要类别相关的子菜单选项将显示,如果子类别有第3个子菜单/子菜单,它们将显示在...

下面的代码是到目前为止我来了..但我似乎不明白为什么它输出主类别几次而不只是一次..

要清楚,我不明白我应该如何使用join来实现这一目标。我希望能够一次回显所有主要类别,并且子类别一次,如果有一个或多个第二子类别,我希望它们也能回应...如何通过加入实现此目的?是甚至可能还是我看错了?

提前致谢。

PHP

<?php


echo '<div class="dl_parent">';

$results = mysqli_query($link, "SELECT * FROM `ws_categories` INNER JOIN `ws_subcategories` ON `ws_categories`.`id` = `ws_subcategories`.`parentcat`;") or die (mysqli_error($link));
    while($row = mysqli_fetch_array($results)){
    echo '
<div class="dl_parent">
    <div class="dl_link">'.$row['maincat'].'</div>
    <div class="dl_sub_dd">
        <ul>
            <li>'.$row['subcat'].'</li>
        </ul>
    </div>
</div>
    ';
   }
?>

的Javascript

    $(window).on('load',function(){
//CLICK-HANDLERS=============================
    $('.dl_link').click(function(){
        var submenu = $(this).parent().children('.dl_sub_dd');
        if (submenu.css('display') == 'none') {
            $('.dl_sub_dd').hide(); //first hide any previously showing submenu's
            submenu.show(); //then show the current submenu
        } else {
            submenu.hide(); //hide the current submenu again
        }
    });
});

CSS

/*LINK------------------------*/
.dl_link {
    cursor:pointer;
}

/*DROPMENU--------------------*/
.dl_sub_dd {
    display:none;
}

1 个答案:

答案 0 :(得分:1)

您的SQL请求会为每个主要类别提供 ,因为它具有子类别的行数

row 1: maincat1 | subcat1
row 2: maincat1 | subcat2
etc...

您可以请求选择所有maincats,并为每个maincat发出另一个请求以选择其所有子类。像这样:

PHP

<?php


$results = mysqli_query($link, "SELECT * FROM `ws_categories`;") or die (mysqli_error($link));
    while($row = mysqli_fetch_array($results)){
    echo '
<div class="dl_parent">
    <div class="dl_link">'.$row['maincat'].'</div>
    <div class="dl_sub_dd">
        <ul>';
             $query = mysqli_query($link, "SELECT * FROM `ws_categories` INNER JOIN `ws_subcategories` ON `ws_categories`.`id` = `ws_subcategories`.`parentcat` WHERE `ws_categories`.`id` = " . $row['id'] . ";") or die (mysqli_error($link));
            while($row2 = mysqli_fetch_array($query)) {
                echo '<li>'.$row2['subcat'].'</li>';
            }
        echo '</ul>
    </div>
</div>
    ';
   }
?>