在Cfquery或Struct上循环?

时间:2010-05-06 05:54:20

标签: coldfusion struct cfloop

我有一个检索某些数据的查询。 考虑到不同div标签中的某些条件,我想显示该数据。 现在我的问题是, 我这样做是通过循环查询一次并获取三个不同结构中的数据并在显示时使用这些结构。这是一个好方法还是 每次在每个div中循环查询以检查条件是rirht方法吗?

     <tr >
<td >
  features:
 </td>
 <td >
    <cfloop query="getAttributes">
      <cfif getAttributes.type_id EQ 1>
        #getAttributes.seat#<br>
      </cfif>
    </cfloop>
 </td>
</tr>
<tr>
 <td >
  Disclosures:
 </td>
 <td >
    <cfloop query="getAttributes">
   <cfif getAttributes.type_id EQ 2>
          #getTicketAttributes.seat#<br>
   </cfif>
  </cfloop>
  </td>
 </tr> 

或者我可以使用以下方法

seatStruct 
disclosureStruct 
<cfloop query="getAttributes">  
<cfif getAttributes.type_id EQ 1> 
Insert seatStruct 
<cfelseif getAttributes.type_id EQ 2> 
insert disclosureStruct 
</cfif> 
Now use these structs to display

2 个答案:

答案 0 :(得分:4)

我认为你必须稍微编辑一下你的问题,举个例子。

少循环始终是最好的方法:) 如果没有必要,转换较少是最佳方法:)

如果您的数据在一个查询中,则不需要多次循环,我猜...

答案 1 :(得分:0)

最好的方法总是取决于您的具体问题。

虽然较少的循环迭代总会导致更快的性能,但有时为了提高可读性而牺牲一些性能是可以接受的。

维护成本通常是软件中最昂贵的部分,因此值得让您的代码易于阅读。

在这个具体案例中:

  • 除非getAttributes查询结果非常大(例如结束) 10000行)或此页面经常异常加载(比如 一次/秒),它可能不会产生明显的差异 你循环的次数。

  • 无论如何,这两个选项将花费相同的时间:第一个选项循环查询两次。第二个选项循环查询一次以填充两个结构,然后您的显示代码循环遍历每个生成的结构(组合具有与查询具有相同数量的元素),从而产生相同的总迭代次数(相当于getAttributes.recordcount*2)。

  • 将查询结果拆分为不同结构的代码有点不寻常,从而降低了可读性并增加了维护成本。由于它实际上并没有提高性能,因此完全适得其反,不应该使用。