ColdFusion:使用名称

时间:2016-08-04 14:19:50

标签: sql coldfusion

我想获取一个查询的记录数,该查询中包含一个变量名称。

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

这显然不会起作用。如何获得每个团队成员的记录数?感谢

5 个答案:

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