2011-10-18 8 views
8

Pętlę wyników wyników zapytania i muszę ograniczyć liczbę wyświetlanych wierszy. Muszę użyć cfoutput, ponieważ używam atrybutu group i nie mogę używać maxrows, ponieważ nie wszystkie wiersze będą wyświetlane.Jak wyrwać się z Cfoutput

Próbowałem użyć <cfbreak> wewnątrz <cfoutput>, ale to powoduje błąd.

Jak mogę zerwać z pętli <cfoutput>?

+2

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

+4

'cfoutput' jest trochę jak hotel Calfornia. AFAIK, nie ma eleganckiego sposobu na wczesne wyjście z tego. Jeśli używasz bazy danych, takiej jak MS SQL 2005, sugerowałbym ograniczenie wierszy w SQL, a nie cfoutput. – Leigh

+0

Nie możesz "pogrupować według" w swoim zapytaniu, aby wyeliminować duplikaty, a następnie po prostu użyć cfloop, z którego możesz zrobić cfbreak? –

Odpowiedz

8

Jeśli twoja grupa jest tam tylko po to, aby usunąć duplikaty z twoich wyników, sugerowałbym, aby za pomocą twojego zapytania wyciąć duplikaty, a następnie możesz cfloop (wybrać odrębne i zmniejszyć zwróconą listę kolumn).

Jeśli używasz swojej grupy, aby "grupować" swoje wyniki Możesz uruchomić licznik w pętli i instrukcję cfif w pierwszej pętli, aby pominąć późniejsze wyniki.

Mogłabyś fałszywy grupa przez opcję w cfloop dopasowując wartość z poprzedniego rzędu, jeśli potrzebujesz cfbreak

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

Losowe Uwaga: Można maxrows na którykolwiek/wszystkie poziomy swojej zgrupowane 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

Ah! Maxrows! Wiedziałem, że tam jest, ale nie myślałem o tym użyciu. Idealny! – Barry

+0

Super plus jeden dla maxrow na każdym poziomie cfoutput! To jest wspaniała wiedza do zdobycia. – tobylaroni

4

Możesz użyć znacznika cfthrow, aby wywołać wyjątek, który pozwoli ci wyjść z pętli za pomocą polecenia cfcatch, a następnie zignorować wyjątek i kontynuować przetwarzanie. To da ci to, czego chcesz.

<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>