从MySQL表生成一个级别菜单

时间:2013-06-27 23:13:35

标签: php select menu mysqli concat

我想使用数据库中的值生成一个菜单。

+------+------+------------+--------------------+--------------+----------+
| ID   |Parent| Name       | Link               | Type         | Order    |
+------+------+------------+--------------------+--------------+----------+
|    1 | 0    | Some Name 2| /path1             | Top          | 1        |
|    2 | 1    | Some Name A| /path2             | Custom       | 1        |
|    3 | 0    | Some Name x| /path3             | Top          | 2        |
|    3 | 1    | Some Name e| /path4             | Custom       | 2        |
|    4 | 1    | Some Name 3| /path5             | Custom       | 3        |
|    5 | 6    | Some Name t| /path6             | Custom       | 1        |
|    6 | 0    | Some Name i| /path7             | Top          | 3        |
+------+------+------------+--------------------+--------------+----------+

菜单应如下所示:

<a href="/path1">Some Name 2</a>
- <a href="/path4">Some Name e</a>
- <a href="/path5">Some Name 3</a>

<a href="/path3">Some Name x</a>

<a href="/path7">Some Name i</a>
- <a href="/path6">Some Name t</a>

ID - 是唯一ID。

父级 - 0表示没有父级,任何其他值表示菜单中父级项目的ID(上方)。

名称 - 菜单中相应项目的文本。

链接 - 菜单中相应项目的链接。

类型 - 顶部表示菜单中的顶级项目,其余部分标记为自定义。

订单 - 对于热门商品,设置它们首先出现在菜单1中的顺序&gt;更大的数字。对于子项,设置它们在相应子项列表中的显示顺序。

菜单只有一个级别:Top&gt;子

我需要做的是找到一种方法从php&amp;中的这些值生成菜单。 mysqli的。

问题是我不知道应该如何继续..我尝试选择concat for ID和Parent但我缺少一些基本的php技能(总菜鸟)。

我该怎么办?欢迎任何想法,谢谢!

2 个答案:

答案 0 :(得分:2)

现在想到的一些快速解决方案(未经测试):

function getCategories($parentID = 0, $level = 0) {
    $categories = array();

    $query = 'SELECT * FROM `table` WHERE `Parent` = '.(int)$parentID.' ORDER BY `Order` ASC';
    $dbCats = runQuery($query); // you have to implement this

    foreach ($dbCats as $cat) {
        $categories[] = str_repeat('-', $level) . '<a href="'.$cat->Link.'">'.$cat->Name.'</a>' . "\n";
        $categories += getCategories($cat->ID, ++$level);
    }

    return $categories;
}
$categories = getCategories();
echo implode('', $categories);

但是,您应该查看Open Cart,例如,看看它是如何提取类别的。

答案 1 :(得分:1)

首先选择第一个查询中的所有顶级菜单,然后创建一个循环,它将全部检索它。在第一个循环中创建另一个查询,它将检索所选菜单的所有子菜单,如果有的话。那就是为什么我们也有if语句..在if语句中创建循环以检索所有子菜单......这是代码:

    $sql = "SELECT * FROM `table` WHERE `Parent` = '0' ORDER BY `Order` ASC";
    $result = mysql_query($sql) or die ("Error: Query Failed! " .mysql_error());
    $output = "<ul>";
    while ($rs = mysql_fetch_array($result)) {
       $output .= "<li><a href='".$rs['Link']."'>".$rs['Name']."</a></li>";
       $sql2 = "SELECT * FROM `table` WHERE `Parent` = '".$rs['ID']."' ORDER BY `Order` ASC";
       $result2 = mysql_query($sql2) or die ("Error: Query Failed! " .mysql_error());
       if (mysql_num_rows($result2) != 0) {
          $output .= "<ul>";
          while ($rs2 = mysql_fetch_array($result2)){
             $output .= "<li><a href='".$rs2['Link']."'>".$rs2['Name']."</a></li>"
          }
          $output .= "</ul>";
       }
    }
    $output .="</ul>";
    echo $output;

没有测试过,但是应该这样做。