2011-09-26 37 views
4

好吧SO用戶...這是看似不可能出錯的條件陳述。然而,這很簡單,我不知道爲什麼它不能按照預期的方式工作。ColdFusion有條件RecordCount

<cfoutput query="checkForAd"> 
     <!--- also used the line <cfif RecordCount eq 0> ---> 
    <cfif checkForAd.RecordCount eq 0> 
     <!--- Display some message. (Perhaps using a table, undecided) ---> 
    <cfelse> 
     <!--- Display some other message. (Happens to be a table) ---> 
    </cfif> 
</cfoutput> 

當RecordCount返回大於0的數字時,else的情況顯示正確。當RecordCount返回0時,不顯示任何內容,並且表單沿其路徑繼續。我非常沮喪,因爲這應該很簡單...

回答

12

如果查詢集爲空,輸出將不會返回任何結果。嘗試:

<cfif checkForAd.RecordCount eq 0> 
    <!--- Display some message. (Perhaps using a table, undecided) ---> 
<cfelse> 
    <cfoutput query="checkForAd"> 
     <!--- Display some other message. (Happens to be a table) ---> 
    </cfoutput> 
</cfif> 

我假設你正在尋找返回的記錄數...如果你只是返回之一,query="checkForAd"是沒有必要的。您只需在<cfoutput></cfoutput>中引用查詢&變量即可。

編輯

這裏的訪問查詢變量的一種方法:QueryName["ColumnName"][RowNum]

(正如你期待擴展你的編碼,有很多你可以查詢變量做還有的一個偉大的破敗在ColdFusion and getting data from MySQL不同的方法)

+0

非常感謝。 我實際上只是返回一條記錄,但是我對ColdFusion以及一般的生產開發都很陌生。感謝您的提示。 :) – TaylorPLM

+0

我的榮幸...隨時接受答案。這將有助於未來的問題。 – nykash

+0

我會,我只是在等待接受一個人的時間限制。 – TaylorPLM

3

由於nykash指出,一個cfoutput query(或cfloop query體)根本不會執行,如果沒有記錄,所以做了一個零的RecordCount檢查絕不會一個內部的真實。

然而,我發現下面的例子更可讀的一個:

<cfif NOT checkForAd.RecordCount > 
    <!--- Display some message. ---> 
</cfif> 

<cfoutput query="checkForAd"> 
     <!--- loop through data ---> 
</cfoutput> 

這可能似乎不是孤立的不多,但我認爲,當聯合這是一個有點更清潔和更容易地看到發生了什麼事情,特別是其他代碼。

特別是在RecordCount檢查中,如果我關心具體數字,那麼我會使用EQ(或NEQ/GT/etc),但如果我只關心「有記錄」vs「沒有記錄」,那麼我使用CFML提供的隱式布爾轉換來簡化代碼。這確實使我更容易識別何時使用常用的二進制選項或更重要的二進制選項,因此在代碼中導航更容易。