0

次のようなクエリ結果があります

ID IDParent Name    Title
--------------------------------------
1  -1   Test1       Test1_Title 
2  -1       Test2       Test2_Title
3  -1       Test3       Test3_Title
4   2   SubTest2    SubTest2_Title
5   2   SubTest3    SubTest3_Title
6   2   SubTest4    SubTest4_Title
7   3   SubTest6    SubTest8_Title
8   3   SubTest8    SubTest10_Title

メニューオプションとサブメニューオプションを使用します。-1のメニューオプションをループし、IDParent-1の各メニューアイテムの後にIDParent子アイテムをループします。

クエリをループするときに、coldfusionはそのようなグループ化を提供しますか?

ありがとう

4

4 に答える 4

5

CFOUTPUTは、クエリのグループ化もサポートしています。

<cfquery name="qGetTests" datasource="#DSN#">
  SELECT   ID, IDParent, Name, Title
  FROM     Menu
  ORDER BY IDParent, Name
</cfquery>

<cfoutput query="qGetTests" group="IDParent">
    #IDParent#<br />
    <cfoutput>
       #ID# #Name# #Title#<br />
    </cfoutput>
</cfoutput>
于 2012-05-07T12:56:34.207 に答える
4

これは、クエリのクエリ(QoQ)と少しの再帰で非常に簡単です。

<!-- database query, sorted in the way you want to display the results -->
<cfquery name="Menu" datasource="#YourDSN#">
  SELECT   ID, IDParent, Name, Title
  FROM     Menu
  ORDER BY Name
</cfquery>

<!-- output menu -->
<cfset OutputQueryRecursive(Menu, -1)>

<!-- support function -->
<cffunction name="OutputQueryRecursive">
  <cfargument name="BaseQuery" type="query"   required="yes">
  <cfargument name="ParentId"  type="numeric" required="yes">

  <cfquery name="CurrLevel" dbtype="query">
    SELECT * FROM BaseQuery WHERE IDParent = #ParentId#
  </cfquery>

  <cfif CurrLevel.RecordCount gt 0>
    <ul>
      <cfoutput query="CurrLevel">
        <li id="menu_#ID#">
          <span title="#HTMLEditFormat(Title)#">#HTMLEditFormat(Name)#</span>
          <cfset OutputQueryRecursive(BaseQuery, ID)>
        </li>
      </cfouptut>
    </ul>
  </cfif>
</cffunction>
于 2012-05-07T10:01:34.843 に答える
1

そのクエリ結果を生成するSQLを制御できる場合は、最初にDBを取得してデータを正しい形式に戻すことを検討できます。OracleとSQLサーバーのアプローチについてはここで説明し、mySQLのオプションはここにあります

メニューデータが常に小さい場合は、Tomalakのソリューションに問題はありませんが、メニュー項目が多数ある場合は、それでも問題なく機能することをテストします。

于 2012-05-09T13:35:42.687 に答える
0

qTestQuery値が含まれていると見なします

<cfset qTestQuery1 = qTestQuery>
<cfloop query="qTestQuery">
    <cfif qTestQuery.IDParent eq -1>
        <span class="main-menu">#qTestQuery.name#</span>
    </cfif>
    <cfset local.parentId = qTestQuery.IDParent>
    <cfloop query="qTestQuery1">
         <cfif qTestQuery1.IDParent eq local.parentId>
              <span class="sub-menu">#qTestQuery1.name#</span>
         </cfif>
    </cfloop>
</cfloop>
于 2017-02-23T12:51:01.367 に答える