如何从闭包表中以 HTML 形式显示树结构

2023-12-19

我在 MySQL 中存储一些分层数据。由于各种原因,我决定使用闭包表(而不是嵌套集、邻接表等)。到目前为止,它对我来说效果很好,但现在我正在尝试弄清楚如何在 HTML 中实际显示这棵树(即使用正确的缩进)。

举个例子,假设我有一棵像这样的树......

  • Food
    • Fruits
      • Apples
      • Pears
    • Vegetables
      • Carrots



我的“食物”表看起来像这样......

[ID]    [PARENT_ID]    [NAME]
1       0              Food
2       1              Fruits
3       1              Vegetables
4       2              Apples
5       2              Pears
6       3              Carrots



我的“关闭”表将如下所示......

[PARENT]    [CHILD]    [DEPTH]
1           1          0
2           2          0
3           3          0
4           4          0
5           5          0
6           6          0
1           2          1
1           3          1
1           4          2
1           5          2
1           6          2
2           4          1
2           5          1
3           6          1



现在我想知道如何在 HTML 中正确显示它,最好像这样......

<ul>
    <li>Food
        <ul>
            <li>Fruits
                <ul>
                    <li>Apples</li>
                    <li>Pears</li>
                </ul>
            </li>
            <li>Vegetables
                <ul>
                    <li>Carrots</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

...这将以项目符号形式显示我的树,就像我的问题开头一样。无论如何,任何帮助将不胜感激!

Charles


您可以使用递归函数调用。

伪代码(摘要):

function showTree(parent_id){

      // retrive child ids from DB using given parent id
      result = GetChildren(parent_id);

      while(...){

          child_id = result[...];

          // Call this function itself
          showTree(child_id);

      }
}

伪代码(详细):

function showTree( parent_id ){

    /* Retrieve child records which has a relationship with the given parent id.*/

    SQL = "SELECT * FROM Foods ( WHERE PARENT_ID = " + parent_id + ")";
    results = executeSQL(SQL);

    print "<ul>";
    i = 0;
    while(/*results has record*/){
        row = results[i];

        print "<li>" + row["NAME"] + "</li>";

        /*
         * Make a recursive call here.
         * Hand out 'ID' as the parameter. 
         * This 'ID' will be received as 'PARENT_ID' in the function called here.
         */
        call showTree(row["ID"]);

        i = i +1;
    }
    print "</ul>";

}
/* 
 * Now start calling the function from top of the nodes.
 */
call showFoods( 0 ); // parameter '0' is the root node.

我希望这个能帮上忙。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从闭包表中以 HTML 形式显示树结构 的相关文章

随机推荐

  • 使用 vuejs 中的方法进行条件 @click

    这是我的 for 循环 li a href crumb name a li click methodName 不应在最后一次迭代中可用 我可以使用 index breadcrumbs length 1 检查最后一次迭代 使用 apply v
  • Caffe Sigmoid交叉熵损失层损失函数

    我正在查看Caffe的代码Sigmoid 交叉熵损失层 https github com BVLC caffe blob master src caffe layers sigmoid cross entropy loss layer cp
  • wkhtmltopdf 的字母间距太大

    我正在使用 wkhtmltopdf 将网页下载为 pdf 但是css属性letter spacing似乎不起作用 font size 20px letter spacing 0px font size 20px letter spacing
  • iOS - MKMapView 使用地址而不是纬度/经度进行位置注释

    我可以在我的MKMapView然而 通过使用纬度和经度 我需要使用位置的提要是使用街道地址而不是纬度和经度 例如 1234 西 1234 东 旧金山 CA 这会不会与CLLocationManager 以前有人尝试过吗 基于psoft的优秀
  • UILabel 文本作为 html 文本

    我被一个小问题困住了 我需要使用一个句子 其中前两个单词为粗体 后两个单词为斜体 喜欢 I am using an O目标C开发商 怎么做 这在 Objective C 中可能吗 对于 iOS7 你可以使用这个 NSString htmlS
  • BLOb:无法读取所有数据,但只有几kb

    我正在使用 BLOb 支持从 MySQl 插入和读取 JDBC 我可以做到这一点 但是当它读取时 它只有几kb 我不知道为什么 这是工作代码 import java sql import java io public class Inser
  • 基于大空白的扫描图像切片

    我打算将问题分开this https www tnpsc gov in Tentative Document RAGS 2022 opt pdfPDF 文档 挑战在于问题的间隔不是有序的 例如第一个问题占据一整页 第二个问题也占据一整页 第
  • 闪存和辅助功能

    作为一名 Web 开发人员 我从事的许多项目都属于政府的范畴 因此受到 508 无障碍法律的约束 有时还受到 W3C 无障碍指南的约束 在满足这些要求的同时 Flash 可以使用到什么程度 对于使用 javascript 口头禅是通过提供相
  • CreateWindow“编辑”键入的字符“不可见”?

    在研究了所有我能找到的正确语法之后CreateWindow Edit 打电话 我不得不认输 当我运行程序时 我在编辑框中得到的只是 隐形字符 当我打字时 光标向右移动 但我输入的字符却看不到 只有当我用鼠标选择框内容时 我才能看到文本 但一
  • 是否有更简单的方法在 C# 控制台应用程序中使用 Windows ctrl+v(粘贴)功能?

    我构建了一个带有命令解释器的控制台应用程序 为了让事情变得更容易 我需要添加对读取剪贴板的支持ctrl v被按下 当我按 ctrl v 时 我看到了符号 V在控制台中 所以我用剪贴板文本替换该字符 经过一番谷歌搜索后 我发现剪贴板可以通过
  • 从 django 模板获取序列化的 json 对象?

    我需要澄清一下 例如 如果我使用序列化对象进行视图 def sample request res name man encoded json dumps res return render to response sample exampl
  • 输入“CREATE TABLE”时没有可行的替代方案

    我无法使用以下命令添加 MySQL 连接器 curl i X POST H Accept application json H Content Type application json localhost 8083 connectors
  • 隐式参数的有效用法

    下列example http www scala lang org node 114 from 斯卡拉之旅显示如何使用隐式根据类型提供适当的缺失成员 add 和 unit 编译器将在范围内选择正确的隐式对象 该库还使用它List sortB
  • gnuplot - 仅在图例/键中增加点的大小

    我有一个如下所示的图表 我想增加图例中点的大小 是图例还是关键 但不增加图中点的大小 图片中解释得更好 这能实现吗 首先不绘制增加符号大小的任何内容 然后绘制不带密钥的数据 gnuplot gt plot 1 0 ls 7 lw 6 wit
  • Python doctest 是否消除了单元测试的需要?

    我所在项目的一位开发人员同事认为文档测试与单元测试一样好 并且如果一段代码经过文档测试 则不需要进行单元测试 我不相信情况是这样 任何人都可以提供一些可靠的 理想引用的例子来支持或反对文档测试取代单元测试需求的论点吗 谢谢 丹尼尔 编辑 任
  • 如何在 C# windows 窗体中在可缩放图像上绘图

    所以我正在实现一个可以读取图像的项目 平移它 缩放它并做其他事情 一切都很顺利 直到我尝试用鼠标右键实现绘图 问题是当我画一条线时 图像上出现的线与我在屏幕上画的线不对应 这意味着它发生了移动 并且我知道它是因为图像的大小和缩放而改变的 但
  • WhatsApp 图像共享 iOS [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在开发一个 iOS 应用程序 我必须在其中从我的应用程序在 WhatsApp 上共享图像 我找到了这段代码 但它只处理文本共享https
  • 如何使用 MobileDevice 框架将文件写入我的应用程序的 Documents 目录?

    因此 我需要以编程方式将文件写入 iPhone 上的应用程序文档目录 由于许可证限制 我无法使用 libimobiledevice iphonedisk 不再维护 据我所知 无论如何您实际上都无法访问应用程序数据 所以我想我需要直接使用Mo
  • 使用 GridLayout 时可以将组件添加到特定网格单元吗?

    当我将 GridLayout 设置为 JPanel 然后添加一些内容时 它会按 文本顺序 从左到右 从上到下 顺序添加 但我想将一个元素添加到特定单元格 在第 j 列的第 i 行中 是否可以 不可以 您不能在特定单元格添加组件 您可以做的是
  • 如何从闭包表中以 HTML 形式显示树结构

    我在 MySQL 中存储一些分层数据 由于各种原因 我决定使用闭包表 而不是嵌套集 邻接表等 到目前为止 它对我来说效果很好 但现在我正在尝试弄清楚如何在 HTML 中实际显示这棵树 即使用正确的缩进 举个例子 假设我有一棵像这样的树 Fo