【问题标题】:MySQLi - select sub menu item from db if parentid same as top menu item idMySQLi - 如果 parentid 与顶部菜单项 id 相同,则从 db 中选择子菜单项
【发布时间】:2013-06-25 12:10:50
【问题描述】:

我有一个包含顶部和子项的菜单。所有项目,顶部和子项目在数据库中都有一个唯一的“id”和一个“parentid”。最上面的项目,所有的值都是“parentid”“0”,子项目的“parentid”和它们对应的最上面的项目的“id”一样..

有没有办法从数据库中选择菜单在页面上看起来像这样?

顶部项目 1 - 我自己的子项目 1、我自己的子项目 2、我自己的子项目 3

顶部项目 2 - 我自己的子项目 1、我自己的子项目 2、我自己的子项目 3

顶部项目 3 - 我自己的子项目 1、我自己的子项目 2、我自己的子项目 3

等等

我是数据库新手,我尝试了所有方法,但我无法得到我想要的东西.. 感谢您的帮助!

【问题讨论】:

  • 发布您尝试过的代码。
  • 菜单有多深?子项可以有子项吗?

标签: php select menu mysqli parent


【解决方案1】:

顶部菜单和子项之间需要有父子关系,所以你需要在子项表中创建一个额外的列,比如main_menu_id,这样做之后,你需要分配@987654323主菜单的 @ 到该列中的子菜单项。

稍后您将需要使用 PHP 的嵌套 while 循环,并且必须相应地获取记录。

/* Loop Top Items Starts
      Loop Inner Items (Fetch Sub Items Having ID Of The Main Item)
   Loop Top Items Ends
*/

第一次查询

SELECT * FROM main_menu;

第二个查询(嵌套在 While 循环中)

SELECT * FROM sub_menu WHERE main_menu_id = $looped_id;

【讨论】:

  • 关于 mysql 中分层数据的精彩阅读:mikehillyer.com/articles/managing-hierarchical-data-in-mysql
  • @Jeroen 感谢您提供这一点,但由于 OP 指定它只能达到 1 级,因此这个答案将满足他的需求 :)
  • 谢谢,我现在至少有了一些想法:)
  • @AdrianM。 BTW $looped_id 是您将在外部循环的 id(父 id):)
  • @Mr. Alien:这并不是对您的回答的真正评论,只是他可能会在他未来的工作中使用的一些额外信息;)它还向您展示了如何使用一个查询来做到这一点,如果很多第一级真的很有用元素存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
相关资源
最近更新 更多