Vikas
Vikas

Reputation: 24332

Use count() function in ColdFusion query of query

I wanted to use count() function in ColdFusion Query object.

Here is my code and test:

<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>

Should I use convert function? Like if total is [enpty string] then result should be 0. Or is there any other best/proper way to do that?

Upvotes: 6

Views: 6166

Answers (3)

deepvanbinnen
deepvanbinnen

Reputation: 79

If you just want the number of rows in de query-object use: #x.recordcount#

Upvotes: -1

Scott Stroz
Scott Stroz

Reputation: 7519

It does seem like this is a bug, however there is an easy way around it. Simply wrap the y.total in val(), so it would read:

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

val() will return 0 if an empty string is passed to it.

Upvotes: 10

Adam Cameron
Adam Cameron

Reputation: 29870

I think you've found a bug in CF here (perhaps log it @ http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html).

The first query should return 0, not [nothing]!

In your simple example, I think just dispense with the QoQ entirely, and just use x.recordCount.

But obviously this is not much chop if you have a WHERE filter in your QoQ, in which case You're gonna need to do something like you suggest. I can't see a better approach here.

If you raise that bug with Adobe, let us know the bug ref so we can vote for it ;-)

-- Adam

Upvotes: 2

Related Questions