【发布时间】:2014-08-01 16:40:07
【问题描述】:
我想在选择列表(下拉列表)中显示类别、子类别和子子类别,就像 WordPress 在其管理面板中显示的方式一样。先看看我的数据库表(tb_categories)-
我想要以下 HTML 格式的输出 -
“无”和“未分类”这两项在代码中是硬编码的。我想知道如何使用选择列表选项按层次顺序显示类别及其子类别。
我正在尝试使用自联接的以下 sql 查询。在这里——
SELECT
`cat`.`category_name` AS 'category name',
`cat2`.`category_name` AS 'parent category'
FROM
`tb_categories` AS `cat`
LEFT JOIN `tb_categories` AS `cat2` ON `cat`.`category_parent` = `cat2`.`category_id`
ORDER BY
'parent category'
它给出的输出是 -
Array
(
[0] => Array
(
[0] => My Parent Category
[category name] => My Parent Category
[1] =>
[parent category] =>
)
[1] => Array
(
[0] => Parent Category 2
[category name] => Parent Category 2
[1] =>
[parent category] =>
)
[2] => Array
(
[0] => Parent Category 3
[category name] => Parent Category 3
[1] =>
[parent category] =>
)
[3] => Array
(
[0] => My Child Category
[category name] => My Child Category
[1] => My Parent Category
[parent category] => My Parent Category
)
[4] => Array
(
[0] => Sports
[category name] => Sports
[1] =>
[parent category] =>
)
[5] => Array
(
[0] => Cricket is best
[category name] => Cricket is best
[1] => Sports
[parent category] => Sports
)
[6] => Array
(
[0] => AJAX
[category name] => AJAX
[1] =>
[parent category] =>
)
[7] => Array
(
[0] => hockey is best
[category name] => hockey is best
[1] => Sports
[parent category] => Sports
)
)
我不知道甚至不确定如何在该选择列表中显示上述数据。我们如何做到这一点?我们如何使用连接来做到这一点?如果我们使用连接,那么我们是否需要一些数组来存储和排序结果?还有我们如何在一个循环中使用多个查询来做到这一点?哪种方法最好?
【问题讨论】:
-
我们如何在一个循环中处理多个查询?我们没有。
-
您还应该选择 id 和 parent_id。否则,当两个类别具有相同名称时,就无法构建结构。然后你应该用递归函数来做。
-
两个类别不能有相同的名称。它在验证中。但是如何使用递归函数呢?
-
我删除了我的答案,因为实际上这不是一个很好的例子。它可能导致许多同时查询和一堆数据库往返。 Hellcode 的要好得多。
-
好的。但我不明白如何将选项值 = 类别 ID 放在选择列表中?