0

作为一个例子,我有一个这样的表:

folder_id | parent_folder_id | folder_name
------------------------------------------
1         | null             | Main
2         | null             | Departments
3         | null             | Archived
4         | 2                | IT
5         | 2                | Sales
6         | 4                | Error Logs
7         | 6                | 2012

ETC...

我需要运行一个查询(如果多个也可以),以便能够通过 Coldfusion 循环并正确显示它们。

我需要它显示如下:

  • 主要的
  • 部门
      • 错误日志
        • 2012
    • 销售量
  • 存档

...等等...深入到用户创建它们。

我只是很难理解这将如何工作的逻辑。谢谢你的帮助!

4

2 回答 2

3

使用 CF 特定的 Query-of-Queries 来执行此操作。因此,您首先查询所有文件夹,然后在 CF 中使用 Query-of-Query 对其进行迭代并处理树的每个子部分。

我认为这个答案可以为您指明方向:

从数据库中的 ParentID 创建嵌套的 <ul> 树结构

于 2013-03-21T15:44:07.833 回答
1

对于任何寻找答案的人,我从 Cody 的链接中获取了代码,并让它为我工作(因为它不能正常工作)。谢谢科迪和夏兰!这里是:

<cfquery name="get_folders" datasource="#application.dsn#">
    select folder_id, parent_folder_id, folder_name
    from folders
    order by folder_name
</cfquery>

<!--- Read all roots (no parent ID) --->
<cfquery name="get_parent_folders" dbtype="query">
    select folder_id, folder_name
    from get_folders
    where parent_folder_id is null
</cfquery>

<ul class="tree">
    <cfloop query="get_parent_folders">
        <cfset processTreeNode(folderId=get_parent_folders.folderId, folderName=get_parent_folders.folder_name) />
    </cfloop>
</ul>

<cffunction name="processTreeNode" output="true">
    <cfargument name="folderId" type="numeric" />
    <cfargument name="folderName" type="string" />
    <!--- Check for any nodes that have *this* node as a parent --->
    <cfquery name="LOCAL.qFindChildren" dbtype="query">
        select folder_id, folder_name
        from get_folders
        where parent_folder_id = <cfqueryparam value="#arguments.folderId#" cfsqltype="cf_sql_integer" />
    </cfquery>
    <li>#arguments.folderName#
        <cfif LOCAL.qFindChildren.recordcount>
            <!--- We have another list! --->
            <ul>
                <!--- We have children, so process these first --->
                <cfloop query="LOCAL.qFindChildren">
                    <!--- Recursively call function --->
                    <cfset processTreeNode(folderId=LOCAL.qFindChildren.folder_id, folderName=LOCAL.qFindChildren.folder_name) />
                </cfloop>
            </ul>
        </cfif>
    </li>
</cffunction>
于 2013-03-21T16:27:30.013 回答