【问题标题】:How to Break out of Cfoutput如何突破 Cfoutput
【发布时间】:2011-10-18 00:07:43
【问题描述】:

我正在循环查询结果,我需要限制显示的行数。我需要使用cfoutput,因为我正在使用group 属性,而我不能使用maxrows,因为不会显示所有行。

我尝试在<cfoutput> 中使用<cfbreak>,但这会引发错误。

如何跳出<cfoutput> 循环?

【问题讨论】:

  • cfoutput 有点像加州酒店。 AFAIK,没有优雅的方法可以尽早摆脱它。如果您使用的是 MS SQL 2005 之类的数据库,我建议限制 SQL 中的行,而不是 cfoutput。
  • 你不能在你的查询中“分组”以消除欺骗,然后只使用 cfloop,你可以从中 cfbreak 吗?
  • 我没有使用该组来删除重复项,而是使用它来对它们进行分组。但我只在其中有超过一行时才显示该组。
  • @Yisroel - 回复:“如果其中有不止一行。” 为什么不在你的 sql 中过滤掉它呢?另外,您使用的是哪个数据库?

标签: coldfusion cfoutput


【解决方案1】:

如果您的 group by 只是为了从结果中删除重复项,我建议使用您的查询来减少它们,那么您可以 cfloop(选择 distinct 并减少返回的列列表)。

如果您使用 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>

【讨论】:

  • 啊!麦克罗斯!我知道它在那里,但没有考虑过这种用途。完美!
  • 对于任何级别的 cfoutput 的 maxrows 超级加一!这是一项很棒的知识。
【解决方案2】:

您可以使用 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-26
    • 2014-08-05
    • 2012-11-27
    • 1970-01-01
    • 2019-12-14
    • 2011-09-12
    • 2019-05-23
    • 2016-04-01
    相关资源
    最近更新 更多