6

count()ColdFusionQueryオブジェクトで関数を使用したかった。

これが私のコードとテストです:

<cfset x = querynew("id,name")>

<cfquery name="y" dbtype="query">
    select count(*) as total from x
</cfquery>

<cfoutput>Test1: #y.total#</cfoutput>

<cfset temp = QueryAddRow(x)>
<cfset Temp = QuerySetCell(x, "id", 1)>
<cfset Temp = QuerySetCell(x, "Name", "Vikas")>

<cfquery name="y" dbtype="query">
    select count(*) as total from x
</cfquery>

<cfoutput>Test2: #y.total#</cfoutput>

変換機能を使用する必要がありますか?合計が[空の文字列]の場合のように、結果は0になるはずです。または、それを行うための他の最良/適切な方法はありますか?

4

3 に答える 3

10

これはバグのようですが、簡単な回避策があります。y.total を val() でラップするだけで、次のようになります。

<cfoutput>Test1: #val(y.total)#</cfoutput> 
<cfoutput>Test2: #val(y.total)#</cfoutput>

空の文字列が渡された場合、val() は 0 を返します。

于 2011-08-16T12:23:43.443 に答える
2

ここで CF のバグを見つけたと思います (おそらく @ http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.htmlでログに記録してください)。

最初のクエリは [nothing] ではなく 0 を返す必要があります。

あなたの簡単な例では、QoQを完全に省き、x.recordCountを使用するだけだと思います。

しかし、明らかに、QoQ に WHERE フィルターがある場合、これはあまり問題ではありません。その場合、提案したようなことをする必要があります。ここでより良いアプローチは見当たりません。

Adobe にそのバグを報告する場合は、バグ ref をお知らせください。投票できるようにします ;-)

-- アダム

于 2011-08-16T11:01:52.113 に答える
-1

クエリオブジェクトの行数だけが必要な場合は、次を使用します:#x.recordcount#

于 2011-08-17T13:24:52.763 に答える