如何在使用组时找到嵌套的cfoutput记录计数

时间:2014-11-07 09:51:54

标签: coldfusion coldfusion-10 cfloop cfoutput

请考虑以下事项:

<cfoutput query="resources" group="type">
    <h4>#type#</h4>
       <cfoutput>
          #name#
       </cfoutput>
 </cfoutput>

resources.recordcount会给我记录的总数,但有没有一种优雅的方法来查找嵌套数据的记录数? e.g

<cfoutput query="resources" group="type">
    <h4>#type# (#noofrecords# of #resources.recordcount#)</h4>
       <cfoutput>
          #name#
       </cfoutput>
 </cfoutput>

我可能会对循环做一些hacky,但是想知道是否有办法专门使用cfoutput组来做这件事。

5 个答案:

答案 0 :(得分:5)

我担心你必须自己做一些计算。没有RecordCount 嵌套的分组输出,因为它实际上是所有相同的查询,CF只是 为你做一点格式化。

答案 1 :(得分:4)

您可以在输入之前进行输出。这比查询查询更有效。

<cfoutput query="resources" group="type">
  <cfset noofrecords= 0>
  <cfoutput>
    <cfset noofrecords++>
  </cfoutput>
  <h4>#type# (#noofrecords# of #resources.recordcount#)</h4>
  <cfoutput>
    #name#
  </cfoutput>
</cfoutput>

答案 2 :(得分:2)

另一种解决方案是:

<!--- I chose the pipe delimiter | names of things often contain commas,
      otherwise, use any delimiter you like --->
<cfset TypesList = Valuelist(resources.type,"|")>

<cfoutput query="resources">
  <h4>#Type# (#ListValueCount(TypesList,Type,"|")# of #resources.recordcount#)</h4>
  <cfoutput>#name#</cfoutput>
</cfoutput>

虽然这也适用于其他应用程序,但它不适用于所有应用程序。它期望类别计数(此处为“类型”)是唯一的(没有两个具有相同名称的类型)。处理此问题的更好方法是根据ID而不是名称进行计数。例如,您可能有类似

的类别设置
Fruits
  Red Ones
    Strawberries
    Raspberries
  Yellow Ones
    Bananas
Vegetables
 Green ones
   Green peppers
 Red Ones
   Red Peppers
   Tomatoes

基于Type(作为字符串),输出将显示Red Ones(4),Yellow Ones(1),Green Ones(1),Red Ones(4),但在类别 - 产品关系表结构中,基于该类别的唯一ID的coutning将检索准确的计数。

答案 3 :(得分:1)

如果你想要一个替代方法,你可以在原始查询中得到计数,但是,你需要在沿着这条路线前测试性能(尽管使用查询查询也会因为没有索引而有性能问题)。

SELECT f1.id, f1.name, f1.type, f2.typeCount
FROM foo f1
INNER JOIN (
    SELECT COUNT(type) as typeCount, type
    FROM foo
    GROUP BY type 
) f2 on f1.type = f2.type 
ORDER BY f1.type, f1.name

然后在CF中你可以做到:

<cfoutput query="resources" group="type">
    <h4>#resources.type# (#resources.typeCount# of #resources.recordCount#)</h4>
    <cfoutput>
      #resources.name#
    </cfoutput>
</cfoutput>

作为附注,在CF10中,您还可以使用如下查询对cfloop进行分组:

<cfloop query="resources" group="type">
    <h4>#resources.type# (#resources.typeCount# of #resources.recordCount#)</h4>
    <cfloop>
      #resources.name#
    </cfloop>
</cfloop>

答案 4 :(得分:-1)

要获取嵌套数据的计数并将其显示在您想要的位置,我会这样做:

<cfoutput query = "rescources" group = "type">
query of queries to get the count this type
output the type and the count
<cfoutput>
output nested data
</cfoutput>
</cfoutput>