获取cfquery中返回的特定行数

时间:2015-05-13 20:07:09

标签: sql-server coldfusion cfquery

我知道您可以获得查询中返回的项目的数量但... 问题:是否可以获得具有特定值的recordcount行,例如......

<cfset totalReturned = myquery.recordcount>

<cfset totalReturnedComplete = myquery.recordcount (where status = "Complete")>

我知道上面的内容不起作用,但我正在寻找类似上面代码的内容。

2 个答案:

答案 0 :(得分:6)

你有几个选择。您可以使用在status = "Complete"时递增的计数器循环查询,或者您可以使用查询查询:

<cfquery name="mynewquery" dbtype="query">
    SELECT status, COUNT(*) AS status_cnt
      FROM myquery
     GROUP BY status
</cfquery>

然而,另一种方法是,因为您正在使用SQL Server,将修改您的初始查询(假设您有权访问),因此使用{返回status = "Complete"的计数{1}}作为窗函数:

SUM()

See SQL Fiddle here.

答案 1 :(得分:2)

通常,正如已经回答的那样,最好尽可能靠近DB进行这种计数。但是,有时您需要根据更多动态参数进行计数,或者您无权访问数据库服务器/服务。在这些情况下,您可以使用查询查询,或者如果使用CF11 +,您可以使用arrayFilter。

arrayFilter的示例如下所示:

... snipped, see link below for full runnable example
// convert query to array of structs
peopleArray = deserializeJSON(serializeJSON(people,"struct"));
// filter the array as needed
notMatt = peopleArray.filter( function(a){
    return a.firstname != 'Matt';
});

然后您可以使用len()arrayLen()函数来计算:notMatt.len()

查询查询选项可能更快,没有进行任何基准测试,但这看起来像:

<cfquery dbtype="query" name="notMatt">
    SELECT count(*) as total 
    WHERE firstname != 'Matt'
</cfquery>

然后你只需使用noMatt.total。下面的trycf要点显示了这两种技术(都是脚本形式)

<强> TryCF.com Examples