计算循环中的变量

时间:2011-03-04 08:29:58

标签: variables loops coldfusion

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

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

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

3 个答案:

答案 0 :(得分:4)

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>

答案 1 :(得分:1)

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

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

希望有所帮助!

答案 2 :(得分:1)

这是另外几个答案,只是为了好玩:),虽然拥有计数器可能是最好的方法,因为你已经产生了使用循环的性能损失。

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

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