我知道您可以获得查询中返回的项目的数量但...
问题:是否可以获得具有特定值的recordcount
行,例如......
<cfset totalReturned = myquery.recordcount>
<cfset totalReturnedComplete = myquery.recordcount (where status = "Complete")>
我知道上面的内容不起作用,但我正在寻找类似上面代码的内容。
答案 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()
答案 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 强>