2010-05-06 69 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)。

  • 將查詢結果拆分爲不同結構的代碼有點不同尋常,從而降低了可讀性並增加了維護成本。由於它實際上並未提高績效,因此完全適得其反,不應使用。