2011-10-18 67 views
8

我正在循環查詢的結果,並且需要限制顯示的行數。我需要使用cfoutput,因爲我使用的是group屬性,而且我不能使用maxrows,因爲不會顯示所有行。如何突破Cfoutput

我試圖用<cfbreak><cfoutput>內,但拋出一個錯誤。

我怎樣才能擺脫<cfoutput>循環?

+2

http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=72819 – Henry

+4

'cfoutput'有點像酒店加利福尼亞州。 AFAIK,沒有優雅的方式來儘早突破它。如果您使用的是像MS SQL 2005這樣的數據庫,我會建議限制SQL中的行,而不是cfoutput。 – Leigh

+0

你不能在你的查詢中「通過分組」來消除欺騙,然後只使用cfloop,你可以從cfbreak? –

回答

8

如果你的小組由只有那裏從結果中刪除重複我會建議使用您的查詢要降價,那麼你可以CFLOOP(選擇不同,減少您的返回列的列表)。

如果您使用的是組由以「集團」你的結果你可以運行你的第一個循環內的循環內的計數器和CFIF聲明省略後來的結果。

你可以假組通過在CFLOOP選項,通過從上一行匹配值,如果你需要cfbreak

<cfloop query="queryname"> 
    <cfif queryname.column[currentrow-1] neq queryname.column[currentrow]> 
    #queryname.column# 
    </cfif> 
</cfloop> 

隨機注意:您可以在任何MAXROWS /你的分組CFOUTPUT各級

<cfset tmp = querynew('id,dd')> 
<cfloop from="1" to="20" index="i"> 
    <cfset queryaddrow(tmp,1)> 
    <cfset querysetcell(tmp,'id',rand(),i)> 
    <cfset querysetcell(tmp,'dd',(i mod 4),i)> 
</cfloop> 
<cfquery dbtype="query" name="tmp">select * from tmp order by dd</cfquery> 

<cfoutput query="tmp" group="dd" maxrows="2">#dd#<br 
    <ul> 
    <cfoutput maxrows="2" group="id"><li>#id#</li></cfoutput> 
    </ul> 
</cfoutput> 
+0

啊! MAXROWS!我知道它在那裏,但沒有考慮這個用途。完善! – Barry

+0

超級加上一個在cfoutput的任何級別的maxrows!這是一個很棒的知識。 – tobylaroni

4

您可以使用cfthrow標籤來觸發一個例外,這將讓你擺脫使用cfcatch那麼你可以忽略異常並繼續處理循環。這會給你你想要的。

<cftry> 
    <cfset i = 0> 
    <cfoutput query="qMyQuery" group="someGroup"> 
      <cfset i = i + 1> 
      Parent 
        <cfoutput> 
          Child 
        </cfoutput> 

        <cfif i GTE 10> 
          <cfthrow type="break"> 
        </cfif> 
    </cfoutput> 

    <cfcatch type="break"> 
      <!--- DO NOTHING - THIS IS A HACK FOR NOT BEING ABLE TO USE CFBREAK inside cfoutput. ---> 
    </cfcatch> 
    </cftry>