创建下拉菜单以表示嵌套类别

时间:2011-03-28 07:41:00

标签: php html html-select

我有一个类别,这个类别在5级被划分为子类别。我想定义一个函数,以便我们如何以适当的方式从所有级别的类别访问数据。

 Full Texts     id  cat_id subcat_id    cat_name subcat_name status
Edit    Delete  1       0       0       food                2
Edit    Delete  2       1       0       indian              1
Edit    Delete  3       2       0       japanis             1
Edit    Delete  4       3       0       chaines             1
Edit    Delete  5       4       0       american            1
Edit    Delete  6       5       0       southex             1
Edit    Delete  7       1       2       indian      up      0
Edit    Delete  8       1       2       indian      delhi   0

有单个根类别食物,其中包含5个类别,其中包含5个子类别。我想通过它来获取所有字段数据的功能,如下所示:

  food

* indian
  japanis
  chaines 
  american 
  southex

 indian
   up
   delhi
在下拉列表中请帮帮我.......

2 个答案:

答案 0 :(得分:0)

你不需要subcatid。豆腐就够了。如果你需要多个图层,只需添加parentid,将第一级catid的parentid设置为-1或0。 请参阅Oracle的EMP表,您可以在同一个表中查看EMPLOYEE与其MANAGER之间的关系。

您应该了解数据库规范化 - 不确定为什么在同一个表中使用cat_id / catname / subcatid / subcatname?这是一个巨大的冗余。 (有些情况下它很有用,但我几乎不确定你的情况)。

答案 1 :(得分:0)

此表不是最佳的...您有几个无用的列。你只需要“id”,“parent_id”和“name”来完成这项工作。

在“parent_id”列中,您必须为某个行所属的记录设置全局“id”,因为除ROOT之外的每个记录都有其父级。那么你不必担心子级别的数量。

例如

[id] [parent_id] [name]
 1    0           food
 2    1           indian
 3    1           japanis
 4    1           chaines
 5    1           american
 6    1           southex
 7    2           up
 8    2           delphi

过滤级别1类别使用查询“SELECT * FROM table_name WHERE parent_id ='1'”其中id = 1是类别“food”(root)的row-id。同样地,您可以仅使用替换该数字来过滤所有其他级别 - 对于“印度”等等,id = 2

要动态更改页面上的下拉列表,您需要一些JavaScript代码(预加载值;简单方法)或Ajax(动态更新;更难的方式)