【问题标题】:mysql creating a menu with submenus orderedmysql创建一个带有子菜单的菜单
【发布时间】:2014-03-16 18:15:56
【问题描述】:

我正在尝试为网站创建一个菜单系统,您可以在其中创建带有子菜单选项的菜单。 在我的 mysql 'menu_item' 表中,有一个 'hierarchy' 列,如果它是顶级菜单,则该列将包含 0,或者它位于菜单层次结构中的菜单项的 id。 现在,我想做的是想出一个 SQL 查询,它将返回一个数组,该数组已经处理好它的顺序,这样在每一行之后,它将排列所有行这是在它的继承权之下。 例如,如果我有这个菜单:

menu1 - menu1.1, menu1.2 menu2 - menu 2.1, menu 2.2 menu 3 - menu 3.1

结果应该是这样的:

菜单 1 菜单 1.1 菜单 1.2 菜单 2 菜单 2.1

等等。

我无法思考如何去做。这甚至可以在 MySQL 中完成,还是我只需要返回整个菜单项列表并在 PHP 中对它们进行排序?

谢谢。

【问题讨论】:

  • 在写问题之前尝试搜索真的有那么难吗?例如:stackoverflow.com/questions/11404468/…
  • 完成了我的研究。我知道我可以用 PHP 做到这一点。我专门问我是否可以获得有序的 mysql 结果。

标签: php html mysql sql


【解决方案1】:

我假设您在 menu_item 表中有一个列,其中包含菜单项名称,例如“菜单 1”、“菜单 2”等。我会将该列称为menu_item_name,因为您的问题中没有指定它。

我认为解决此问题的方法是如果层次结构为零,则在返回的列中添加任何内容,否则添加“。”和层级编号。此外,按您已经按(可能是 menu_item_name)排序的任何内容进行排序,然后按层次结构排序。

SELECT 
    menu_item_name + CASE WHEN hierarchy <> 0 THEN '.' + hierarchy ELSE '' END
FROM
    menu_item
ORDER BY
    menu_item_name, hierarchy

试试这个,让我知道它是否有效。

干杯,

Z

【讨论】:

    猜你喜欢
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2019-10-20
    • 2012-03-08
    • 1970-01-01
    相关资源
    最近更新 更多