如何摆脱 Cfoutput

发布于 2024-12-10 04:19:23 字数 273 浏览 0 评论 0原文

我正在循环查询结果,并且需要限制显示的行数。我需要使用 cfoutput 因为我使用的是 group 属性,并且无法使用 maxrows 因为并非所有行都会显示。

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

如何跳出 循环?

I am looping through the results of a query, and I need to limit the number of rows displayed. I need to use cfoutput because I'm using the group attribute, and I cannot use the maxrows because not all rows will be displayed.

I tried to use <cfbreak> inside the <cfoutput>, but that throws an error.

How can I break out of the <cfoutput> loop?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

戏剧牡丹亭 2024-12-17 04:19:23

如果您的分组依据只是从结果中删除重复项,我建议使用您的查询来减少它们,然后您可以 cfloop (选择不同并减少返回的列列表)。

如果您使用 group by 对结果进行“分组”,您可以在循环中运行一个计数器,并在第一个循环中运行 cfif 语句以忽略后面的结果。

如果您需要 cfbreak,您可以通过匹配前一行的值来伪造 cfloop 中的分组选项

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

If your group by is only there to remove duplicates from your results I would suggest using your query to cut them down then you can cfloop (select distinct and reducing your returned column list).

If you are using your group by to "group" your results You could run a counter within your loop and a cfif statement inside your first loop to omit later results.

You could fake the group by option in your cfloop by matching value from previous row if you need cfbreak

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

Random note: you can maxrows on any/all levels of your grouped 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>
完美的未来在梦里 2024-12-17 04:19:23

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

You could use the cfthrow tag to trigger an exception that will allow you to break out of the loop using cfcatch you can then ignore the exception and continue processing. That will give you what you want.

    <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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文