2010-05-06 138 views
2

我有一个查询检索一些数据。 我想在不同的div标签中考虑一些条件来显示这些数据。 现在我的问题是, 我通过循环查询一次,获取三个不同结构中的数据并在显示时使用这些结构来完成此操作。这是一个很好的方法或 在每个div中每次循环查询来检查条件是rip方法吗?循环遍历一个Cfquery或Struct?

 <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 

回答

4

我认为你必须编辑您的问题一点点,放一些例子。

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

如果你的数据是在一个查询,比没有必要循环不止一次,我想..

+0

嗨,我已经添加了代码。而不是做上述的方式,我可以得到两个差异结构中的内容,并使用它们 ? 喜欢... seatStruct disclosureStruct 插入seatStruct 插入disclosureStruct 现在使用这些结构显示。 – Somu 2010-05-06 07:06:21

+2

你也可以做查询的查询: \t选择\t \t FROM \t的getAttributes \t WHERE \t TYPE_ID = 2 和同为TYPE_ID = 1 所以再次没有必要转换为结构。 – 2010-05-06 08:32:23

+0

好的,这是否意味着查询是最好的方式而不是使用结构? – Somu 2010-05-06 10:03:55

0

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

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

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

在这种特定的情况下:

  • 除非getAttributes查询结果是非常大(如超过 10000行)或本页面加载异常常常(比如超过 次/秒),它可能将不会有多少 次循环。

  • 无论如何,这两个选项都需要完全相同的时间:第一个选项遍历查询两次。第二个选项循环查询一次以填充两个结构体,然后显示代码循环遍历每个生成的结构体(它们与查询具有相同行数的元素数相同),从而得到相同的总迭代次数(相当于getAttributes.recordcount*2)。

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