如何使用SQL查询中的数据填充Javascript动态树

如何使用SQL查询中的数据填充Javascript动态树,javascript,jquery,sql,tree,cognos,Javascript,Jquery,Sql,Tree,Cognos,我已经在互联网和这个网站上搜寻这个问题的答案,但我还没有看到它。如果我错过了一个帖子,我深表歉意 我尝试使用SQL查询返回的数据在Javascript中填充树 SQL查询将返回以下数据 ROOT_NODE_ID LEVEL1_ID LEVEL1_NAME LEVEL2_ID LEVEL2_NAME LEVEL3_ID LEVEL3_NAME LEVEL4_ID LEVEL4_NAME LEVEL5_ID LEVEL5_NAME LEVEL6_ID LEVEL6_NAME LEVEL7_ID LE

我已经在互联网和这个网站上搜寻这个问题的答案,但我还没有看到它。如果我错过了一个帖子,我深表歉意

我尝试使用SQL查询返回的数据在Javascript中填充树

SQL查询将返回以下数据

ROOT_NODE_ID LEVEL1_ID LEVEL1_NAME LEVEL2_ID LEVEL2_NAME LEVEL3_ID LEVEL3_NAME LEVEL4_ID LEVEL4_NAME LEVEL5_ID LEVEL5_NAME LEVEL6_ID LEVEL6_NAME LEVEL7_ID LEVEL7_NAME LEVEL8_ID LEVEL8_NAME LEVEL9_ID LEVEL9_NAME LEVEL10_ID LEVEL10_NAME 
例如

Root  (ROOT_NODE_ID)
   Company 1  (LEVEL1_ID)
       Location 1  (LEVEL2_ID)
           Information1  (LEVEL3_ID)
       Location 2  (LEVEL2_ID)
   Company 2  (LEVEL1_ID)
-ROOT\u NODE\u ID ROOT指向当前节点的父节点

-LEVEL1_ID Company 1指向根的子级

-LEVEL2_ID位置1指向LEVEL1_ID的子级

-LEVEL3_ID信息1指向LEVEL2_ID的子级

-公司2的创建方式与SQL查询中的另一行数据相同

-位置2的根节点ID将等于公司1,因为公司1是位置2的父节点

我希望这是有道理的。我目前正在使用jquery,这就是我如何构建我的树

$(function(){

$("#tree2").dynatree({
    checkbox: true,
    }
});

var rootNode = $("#tree2").dynatree("getRoot");
// Call the DynaTreeNode.addChild() member function and pass options for the new node

//Adding Root
var Root = rootNode.addChild({
    title: "Root",
});

//Adding Level 1
var Company1 = Root.addChild({
    title: "Company 1",
});

//Adding Level 1
var Company2 = Root.addChild({
    title: "Company 2",
});

//Adding level 2
var Location1 = Company1.addChild({
    title: "Location 1",
});
//Adding level 2
var Location2 = Company1.addChild({
    title: "Location 2",
});

//Adding level 3
var Information1 = Location1.addChild({
    title: "Information 1",
});

});
mh


在构建树结构时,使用递归函数很重要。永远不要在树中按深度构建函数

将原始查询作为文本从服务器返回到客户端有点粗糙。我建议将您的查询转换为JSON或XML,以便利用现有的工具来实现这一点。没有理由手动将文本响应解析回数据结构

在最佳实践中,数据库内容和客户机视图从不直接相互通信。这就是为什么你没有找到任何有用的信息,这样做

一旦定义了开发环境,例如运行LAMP Linux、Apache、MySQL、PHP服务器,我们就可以继续处理存储在表中的数据结构本身:

ID | Parent | Type | Name | Target
1 | 0 | Folder | "Root" | null
2 | 1 | Document | "Read Me" | "SomePath/Readme.txt"
3 | 1 | Folder | "My Documents" | "SomePath/My_Documents/"
4 | 3 | Document | "Black Book" | "SomePath/My_Documents/Black_Book.txt"
我不是DBA,但是如果您查看父列,您可以看到任何节点都可以有子节点,因此请使用业务逻辑来防止不必要的事情发生,例如文档有子节点。谁知道呢,也许您的业务逻辑是允许文档具有与其关联的type->Permission子级。无论哪种方式,都不要将树逻辑与业务逻辑混淆

现在,您的查询结果看起来更像树查询。您有3个典型选项:

1通过服务器端模板传递它,并将HTML输出到客户端进行渲染。 2将查询计算到XML树中,并将其传递给客户端模板。 3将查询计算为JSON对象,并将其传递给客户端模板

一旦您完成了所有这些内容,我们就可以处理等式的最后一部分,将响应附加到DOM

$('someLocation').append(response);

我建议现在使用服务器端模板生成。它是最古老的,有多年的文档记录。

在构建树结构时,使用递归函数非常重要。永远不要在树中按深度构建函数

将原始查询作为文本从服务器返回到客户端有点粗糙。我建议将您的查询转换为JSON或XML,以便利用现有的工具来实现这一点。没有理由手动将文本响应解析回数据结构

在最佳实践中,数据库内容和客户机视图从不直接相互通信。这就是为什么你没有找到任何有用的信息,这样做

一旦定义了开发环境,例如运行LAMP Linux、Apache、MySQL、PHP服务器,我们就可以继续处理存储在表中的数据结构本身:

ID | Parent | Type | Name | Target
1 | 0 | Folder | "Root" | null
2 | 1 | Document | "Read Me" | "SomePath/Readme.txt"
3 | 1 | Folder | "My Documents" | "SomePath/My_Documents/"
4 | 3 | Document | "Black Book" | "SomePath/My_Documents/Black_Book.txt"
我不是DBA,但是如果您查看父列,您可以看到任何节点都可以有子节点,因此请使用业务逻辑来防止不必要的事情发生,例如文档有子节点。谁知道呢,也许您的业务逻辑是允许文档具有与其关联的type->Permission子级。无论哪种方式,都不要将树逻辑与业务逻辑混淆

现在,您的查询结果看起来更像树查询。您有3个典型选项:

1通过服务器端模板传递它,并将HTML输出到客户端进行渲染。 2将查询计算到XML树中,并将其传递给客户端模板。 3将查询计算为JSON对象,并将其传递给客户端模板

一旦您完成了所有这些内容,我们就可以处理等式的最后一部分,将响应附加到DOM

$('someLocation').append(response);
我建议现在使用服务器端模板生成。它是最古老的,并且有多年的文档记录。

您有两个问题

从SQL到JavaScript获取数据

通常,您必须使用Perl、Python、Ruby或PHP等语言在服务器端动态生成页面。如果您使用的是Node.js,甚至是JavaScript,但它仍然不会在浏览器中运行。这可以在生成页面时完成,也可以通过AJAX等技术完成。我不再多说了,因为你会在网上的很多地方找到很多关于它的信息

使用返回的数据,创建一个 树形结构

我将有一个hash/dictionary/JavaScript对象将所有节点的id映射到它们在树中的位置。然后,对于每个节点,您可以找到其父id对象,并将新节点作为新对象追加,同时将其添加到哈希中。完成后,你会有一棵漂亮的树。这可以在一个简单的循环中完成。可以在服务器端用服务器端语言生成树结构,也可以在客户端用JavaScript生成树结构

你有两个问题

从SQL到JavaScript获取数据

通常,您必须使用Perl、Python、Ruby或PHP等语言在服务器端动态生成页面。如果您使用的是Node.js,甚至是JavaScript,但它仍然不会在浏览器中运行。这可以在生成页面时完成,也可以通过AJAX等技术完成。我不再多说了,因为你会在网上的很多地方找到很多关于它的信息

使用返回的数据,创建树结构

我将有一个hash/dictionary/JavaScript对象将所有节点的id映射到它们在树中的位置。然后,对于每个节点,您可以找到其父id对象,并将新节点作为新对象追加,同时将其添加到哈希中。完成后,你会有一棵漂亮的树。这可以在一个简单的循环中完成。可以在服务器端用服务器端语言生成树结构,也可以在客户端用JavaScript生成树结构


绝对同意Christopher关于没有每深度函数的回答。您也不应该为每个级别返回单独的列。父Id技术工作得很好,或者如果您使用的是Microsoft SQL Server 2008,它内置了对使用HierachyId类型的层次结构的支持,这与Christopher关于没有每深度函数的回答完全一致。您也不应该为每个级别返回单独的列。父Id技术运行良好,或者如果您使用的是MicrosoftSQLServer2008,那么它使用我在初始帖子中编辑的HierachyId类型构建了对层次结构的支持。我将查询转换成XML,并发布了一个结果示例。不知道该怎么办,因为标签很模糊。我不打算按深度设置函数。我只是举个例子。我已经创建了一些函数,它们将父对象的名称和子对象的名称作为参数,然后附加它们。我只是被困在如何获取数据的问题上。我编辑了我最初的帖子。我将查询转换成XML,并发布了一个结果示例。不知道该怎么办,因为标签很模糊。我不打算按深度设置函数。我只是举个例子。我已经创建了一些函数,它们将父对象的名称和子对象的名称作为参数,然后附加它们。我只是被困在如何获取数据上。