誰かがこれを改善するのを手伝ってくれますか? もっと良い方法があるはずです。私がやっていることは、ツリー メニューを生成するために、flex が取得するローカル Web サービスを構築することです。私が Web サービスと呼んでいるアプリケーションである Flex は、背景にすぎませんが、問題とは何の関係もありません。
このツリーの階層データを作成するために、次のようにコーディングしました。
<cffunction name="getFormsBinMenu" access="remote" returntype="string">
<cfquery name="getParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = 1 ORDER BY sortorder ASC
</cfquery>
<cfoutput>
<cfxml variable="formsBinMenu">
<?xml version='1.0' encoding='utf-8' ?>
<folder label="Forms Bin">
<cfloop query="getParents">
<folder label="#XMLFormat(getParents.catname)#">
<cfquery name="getSubParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = #catid# and testonly = 0 and visible = 1 ORDER BY sortorder ASC
</cfquery>
<cfloop query="getSubParents">
<folder label="#XMLFormat(getSubParents.catname)#">
<cfquery name="getNextSubParents" datasource="db_intranet_data">
SELECT * FROM formsbin_categories WHERE parentid = #catid# and testonly = 0 and visible = 1 ORDER BY sortorder ASC
</cfquery>
<cfloop query="getNextSubParents">
<folder label="#XMLFormat(getNextSubParents.catname)#"/>
</cfloop>
</folder>
</cfloop>
</folder>
</cfloop>
</folder>
</cfxml>
</cfoutput>
<cfset menu = #toString(formsBinMenu)#>
<cfreturn menu>
</cffunction>
ご覧のとおり、さまざまなクエリをループしているだけです。これは私の目的には合っていますが、コードの繰り返しがあまりないようにするにはどうすればよいでしょうか?
構造の深さが何レベルになるかを確認してから、すべてをインデックス ループで実行することを考えましたが、それでもオーバーヘッドが大きすぎるようです。
どんな提案も素晴らしいでしょう!