2014-09-04 78 views
-2

我想獲得一列中字符串的記錄總數。如何比較查詢結果中的字符串?

例如,seller column ='ONA'。我想知道有多少記錄等於「ONA」,有多少不是。

這是我有:

<cfset stringONA= "ONA"> 
<CFSET onaseller= 0> 
<CFSET notseller=0> 

<cfloop query="getunion_again"> 
    <cfif #getunion_again.seller# eq stringONA> 
    <cfset onaseller = onaseller +1 > 
    <P>TEST</P> 
    <cfelse> 
    <cfset notseller = notseller +1> 
    </cfif> 
</cfloop> 
<cfdump var=#onaseller #> 
<cfdump var=#notseller #> 

我沒有得到任何錯誤,只是沒有得到任何計數。

+1

多少條記錄在您的查詢?兩個變量都爲0表示你的查詢沒有記錄 – 2014-09-04 00:41:16

+1

你不應該在'#'之前沒有這些空格的情況下使用' '嗎? – PeterKA 2014-09-04 01:50:19

+0

@ user3558931:儘管沒有空間是一種很好的編碼習慣,但在這種情況下不會給出任何錯誤。 – 2014-09-04 02:07:24

回答

5

做一個查詢來獲取符合條件的記錄數量而不循環會不會更容易?

<cfquery name="qryCount" dbtype="query"> 
SELECT COUNT(*) AS positive_count 
FROM getunion_again 
WHERE seller = <cfqueryparam cfsqltype="cf_sql_varchar" value="#stringONA#"> 
</cfquery> 

<cfset onaseller = qryCount.positive_count> 
<cfset notseller = getunion_again.recordcount - onaseller> 
+0

@ user3591637:我必須恐怕這裏是最好的答案。 QoQ具有相當大的處理開銷,並且在這裏不需要。這絕對是*答案,但這不是你應該採取的方法。 – 2014-09-04 18:21:31

3

人們可以使用listValueCountNoCase()在列表中算比賽,並且可以使用valueList()提取查詢列的列表。不匹配的數量是行數減去匹配數量。

所以:

values = valueList(getunion_again.seller); 
onaseller = listValueCountNoCase(values, stringONA); 
notseller = getunion_again.recordCount - onaseller; 
+1

不知道它是否適用於這裏,但如果你*只*需要總數,我會建議一個數據庫查詢和'CASE'語句來代替。 – Leigh 2014-09-04 06:13:42