如何跳出 Cfoutput

8
我正在遍历查询结果,并且需要限制显示的行数。由于我正在使用group属性,所以需要使用cfoutput,而我不能使用maxrows因为并非所有行都将被显示。
我尝试在<cfoutput>中使用<cfbreak>,但是会抛出错误。
如何跳出<cfoutput>循环?

2
http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=72819 - Henry
4
cfoutput有点像《加州旅馆》。据我所知,没有优雅的方法可以提前跳出它。如果你正在使用像 MS SQL 2005 这样的数据库,我建议限制 SQL 中的行数,而不是在 cfoutput 中限制。 - Leigh
你能否在查询中使用“group by”来消除重复项,然后只需使用cfloop,从中可以使用cfbreak? - Barry Jordan
我不是使用组来删除重复项,而是使用它来对它们进行分组。但只有当组中有多于一行时,我才会显示该组。 - Yisroel
@Yisroel - 关于 "if there is more than one row in it." 为什么不在你的SQL中过滤掉它呢?另外,你使用的是哪个数据库? - Leigh
这个问题没有简单的答案,这很好地概括了Cold Fusion。 - Tastybrownies
2个回答

8
如果你的group by只是为了从结果中去除重复项,我建议使用查询将它们削减,然后可以使用cfloop(选择不同并减少返回列列表)。
如果你使用group by来“分组”结果,可以在循环内部运行一个计数器和一个cfif语句,在第一个循环内省略后续结果。
如果需要cfbreak,可以通过匹配前一行的值来模拟cfloop中的group by选项。
<cfloop query="queryname">
  <cfif queryname.column[currentrow-1] neq queryname.column[currentrow]>
    #queryname.column#
  </cfif>
</cfloop>

随机笔记:您可以在组合的cfoutput的任何/所有级别上使用maxrows

<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!我知道它在那里,但没有想到它可以用在这里。太完美了! - Barry
无论在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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接