我想获取一个查询的记录数,该查询中包含一个变量名称。
<cfloop query="Getteam">
<cfquery name="GetJobs#teamstaffid#" datasource="#dataSource#" >
SELECT *
FROM Request, Hist_Req_Assign, Hist_Req_status
WHERE hist_req_assign.teamstaffid = '#teamstaffid#' AND
hist_req_assign.requestid = request.requestid AND
hist_req_status.requestid = request.requestid AND
hist_req_status.statusid = '3'
</cfquery>
</cfloop>
GetTeam吐出我团队中每位员工的身份证明
而GetJob#teamstaffid#
可以完成所有工作。
我的第一直觉是:<cfoutput>#GetJobs#teamstaffid#.RecordCount#</cfoutput>
这显然不会起作用。如何获得每个团队成员的记录数?感谢
答案 0 :(得分:4)
name
标记中的cfquery
属性是查询的输出变量。如果未指定,则GetJobs#teamstaffid#
等变量的默认范围为VARIABLES
。 ColdFusion中的可变范围是结构。
要访问动态变量,请对结构使用括号表示法:
<cfoutput>#VARIABLES["GetJobs#teamstaffid#"].RecordCount#</cfoutput>
注意:如果您的代码是函数的一部分,请使用LOCAL
范围而不是VARIABLES
范围。
答案 1 :(得分:0)
直接回答这个问题;您可以在每次迭代中提取上下文中的数据名称(GetJobs#teamstaffid#)并将其存储到全局列表/数组/结构中以供稍后使用,但是,正如已经讨论的那样,最好构造查询以获取所有内容一次。
如果不了解您的架构,就很难在SQL上提供具体内容。
答案 2 :(得分:-1)
我可能会沿着这些方向做点什么:
<cfscript>
try {
sql = "select * from Request, Hist_Req_Assign, Hist_Req_status where hist_req_assign.requestid = request.requestid and hist_req_status.requestid = request.requestid and hist_req_status.statusid = '3'";
principalQuery = new query();
principalQuery.setDatasource(dataSource);
result = principalQuery.execute(sql=preserveSinglequotes(sql));
getJobs = result.getResult();
for(i=1;i<=listLen(teamstaffid);i++){
sql = "select request, Hist_Req_Assign, Hist_Req_status from sourceQuery where hist_req_assign=#teamstaffid[i]#";
local.queryService = new query();
local.queryService.setName("employee");
local.queryService.setDBType("query");
local.queryService.setAttributes(sourceQuery=getJobs);
local.objQueryResult = local.queryService.execute(sql=sql);
local.queryResult = local.objQueryResult.getResult();
writeOutput("Employee " & teamstaffid[i] & " has " & local.queryResult.recordcount & " records.");
}
} catch (any e){
//whatever
}
</cfscript>
答案 3 :(得分:-1)
cfquery标记在结构中返回一些结果变量。因此,我们在cfquery标记中使用result属性,我们可以获得查询的一些细节。
例如: 1. resultname.sql 2. resultname.recordcount
<cfloop query="Getteam">
<cfquery name="GetJobs#teamstaffid#" datasource="#dataSource#" result="resultname">
SELECT *
FROM Request, Hist_Req_Assign, Hist_Req_status
WHERE hist_req_assign.teamstaffid = '#teamstaffid#' AND
hist_req_assign.requestid = request.requestid AND
hist_req_status.requestid = request.requestid AND
hist_req_status.statusid = '3'
</cfquery>
</cfloop>
<cfoutput>#resultname.recordcount#</cfoutput>
答案 4 :(得分:-1)
只需使用Coldfusion功能评估
<cfoutput>#Evaluate("GetJobs#teamstaffid#").RecordCount#</cfoutput>
<cfoutput>#Evaluate("GetJobs#teamstaffid#").column1#</cfoutput>
<cfoutput>#Evaluate("GetJobs#teamstaffid#").column2#</cfoutput>
.....
虽然您可以使用Evaluate访问记录集中的任何列或字段,但最好将返回的查询对象首先存储在变量(循环内)中作为短手访问,以便您可以轻松地从其他列/字段到达查询记录集。
<cfloop query="Getteam">
<cfquery name="GetJobs#Getteam.teamstaffid#" datasource="#dataSource#" >
SELECT *
FROM Request, Hist_Req_Assign, Hist_Req_status
WHERE hist_req_assign.teamstaffid = '#Getteam.teamstaffid#' AND
hist_req_assign.requestid = request.requestid AND
hist_req_status.requestid = request.requestid AND
hist_req_status.statusid = '3'
</cfquery>
<cfset QGetJob = #Evaluate("GetJobs#Getteam.teamstaffid#")# />
<cfoutput>#QGetJob.RecordCount#</cfoutput>
<cfoutput>#QGetJob.column1#</cfoutput>
<cfoutput>#QGetJob.column2#</cfoutput>
</cfloop>