【问题标题】:Count variables in a loop在循环中计算变量
【发布时间】:2011-03-04 08:29:58
【问题描述】:

我想计算变量并将其显示在我的代码中的某处。我有一个循环:

<cfloop query="get_serial">
  <cfif PROCESS_ID eq attributes.action_id> #SERIAL_NO# </cfif>
</cfloop>

及其查询:

<cfquery name="get_serial" datasource="#dsn3#">
SELECT * 
FROM SERVICE_GUARANTY_NEW 
WHERE STOCK_ID = #attributes.action_row_id# 
ORDER BY SERIAL_NO
</cfquery>

一切正常,但我想计算准确显示了多少变量。我实际上想这样做是因为我缺少数据库变量。实际上可以从数据库中获取这些变量的数量,我只是不知道要使用哪些变量。这就是为什么我想手动计算它。

【问题讨论】:

    标签: variables loops coldfusion


    【解决方案1】:

    ColdFusion 公开了一个变量,告诉您查询中返回了多少行,而无需运行循环来计算它们:

    <cfquery name="get_serial" datasource="#dsn3#">
        SELECT * 
        FROM SERVICE_GUARANTY_NEW 
        WHERE STOCK_ID = #attributes.action_row_id# 
        ORDER BY SERIAL_NO
    </cfquery>
    
    <cfoutput>There are #get_serial.recordCount# rows.</cfoutput>
    
    <cfoutput query="get_serial">
        <p>#get_serial.serial_no#</p>
    </cfoutput>
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,您可以在循环中使用计数器。

      <cfset counter = 0 />
      
      <cfloop query="get_serial">
        <cfif PROCESS_ID eq attributes.action_id> 
          #SERIAL_NO# 
          <cfset counter ++ />
        </cfif>
      </cfloop>
      
      <cfoutput>Output #counter# times!</cfoutput>
      

      编辑:回答您的后续问题:

      <cfset counter = 0 />
      <cfsavecontent variables="myContent">
      
        <cfloop query="get_serial">
          <cfif PROCESS_ID eq attributes.action_id> 
            #SERIAL_NO# 
            <cfset counter ++ />
          </cfif>
        </cfloop>
      
      </cfsavecontent>
      
      <cfoutput>
      
        <p>Output #counter# times!</p>
        <p>#myContent#</p>
      
      </cfoutput>
      

      希望有帮助!

      【讨论】:

      • 谢谢!这比看起来容易:)
      • 如果循环在底部,你能解释一下如何在页面顶部显示#counter#吗?
      • 我将其添加到答案中 - 使用cfsavecontent
      【解决方案3】:

      这是另外几个答案,只是为了好玩 :),尽管使用计数器可能是最好的方法,因为使用循环已经对性能造成了影响。

      <cfquery name="getCount" dbtype="query">
      SELECT PROCESS_ID FROM get_serial WHERE PROCESS_ID = #attributes.action_id#
      </cfquery>
      <cfset total = getCount.RecordCount />
      

      而且使用列表,总是很有趣:

      <cfset total = ListValueCount(ValueList(get_serial.PROCESS_ID), attributes.action_id) />
      

      关键是有多种方法可以解决这类问题,所以玩得开心:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 2021-02-05
        • 2022-08-11
        • 2018-04-04
        • 2018-10-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多