2011-10-18 14 views
8

私はクエリの結果をループしているので、表示する行の数を制限する必要があります。私はgroup属性を使用しているのでcfoutputを使用する必要があり、すべての行が表示されるわけではないため、maxrowsを使用することはできません。Cfoutputから抜け出す方法

<cfoutput>の中で<cfbreak>を使用しようとしましたが、エラーが発生します。

<cfoutput>ループからどのように抜け出すことができますか?

+2

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

+4

'cfoutput'は少しホテルカリフォルニア州のようなものです。 AFAIK、それを早期に打ち破るエレガントな方法はありません。 MS SQL 2005のようなデータベースを使用している場合は、cfoutputではなくSQLの行を制限することをお勧めします。 – Leigh

+0

あなたはあなたの質問に「グループ化」することはできません。括りをなくしてから、cfloopを使用してcfbreakできますか? –

答えて

8

あなたのグループがあなたの結果から重複を削除するためだけにある場合は、それらを切り落とすためにあなたのクエリーを使用することをお勧めします(別のものを選択し、返された列リストを減らすことができます)。

結果をグループ化するためにグループを使用している場合ループ内のカウンタと最初のループ内のcfif文を実行して、後で結果を省略することができます。

あなたは可能性があり、偽のあなたが

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

ランダムノートをcfbreak必要がある場合は、前の行から値を照合することによって、あなたのcfloop内のオプションによってグループ:あなたがグループ化された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> 
のいずれか/すべてのレベルでのmaxRowsすることができます
+0

ああ!マクローズ!私はそれがそこにあることを知っていたが、この使用のために考えなかった。完璧! – 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> 
関連する問題