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

等...

ループしてColdfusionを介して適切に表示できるようにするには、クエリを実行する必要があります(複数の場合も問題ありません)。

次のように表示する必要があります。

  • 主要
  • 部門
    • それ
      • エラーログ
        • 2012年
    • 売上高
  • アーカイブ

...etc...ユーザーが作成するのと同じくらい深くなります。

これがどのように機能するかについての論理を理解しようとするのに苦労しています。助けてくれてありがとう!

4

2 に答える 2

1

答えを探している人のために、私はコーディのリンクからコードを取得し、それを機能させました(適切に機能していなかったため)。コーディとシアランに感謝します!ここにあります:

<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 に答える