1

我正在尝试使用下面的 cfml(sql) 语句查询数据库,但我希望能够从数组中获取每个 stat_instance 的结果,最后一行包含循环,我认为应该为每个值生成一个查询从数组

select 
    <cfif monthCrossover>
        statsMinEnd2 + 
    </cfif> 
    stats_min as time_stamp, 
    <cfif structKeyExists(avgThis, arguments.key)>
        avg
    <cfelse>
        sum
    </cfif>
    (stats_value) as stats_value 
from stats_kv_table_201207 
where 
    <cfif dayStart == dayEnd>
        stats_day = <cfqueryparam value="#dayStart#">
    <cfelse> 
        stats_day >= <cfqueryparam value="#dayStart#"> 
        and stats_day <= <cfqueryparam value="#dayEnd#">
    </cfif>
    and stats_min >= <cfqueryparam value="#statsMinStart1#"> and stats_min <= <cfqueryparam value="#statsMinEnd1#">
    and stats_component = <cfqueryparam value="#arguments.component#">
    <cfset instanceList = ListToArray(arguments.instance)>
    <cfif ArrayLen(instanceList) EQ 1>
        and stats_instance = <cfqueryparam value="#arguments.instance#">
    </cfif>
    <cfif ArrayLen(instanceList) GT 1>
        and stats_instance IN (<cfqueryparam value="#arguments.instance#" list="yes"/>)
    </cfif>
    <cfif ArrayLen(instanceList) GT 1 and ArrayContains(instanceList, "multi")>
        <cfloop index = "i" from="1" to="#arrayLen(instanceList)#"  array =#instanceList#> 
            <cfset stats_instance = <cfqueryparam value= #instanceList[i]#>
        </cfloop>
    </cfif>
4

2 回答 2

1

如果我正确理解您的问题,您可能需要在查询中使用 GROUP BY 子句按 stats_instance 对总和/平均值进行分组。像这样的东西:

SELECT stats_instance, ...
FROM ...
WHERE
... 
<cfif len(trim(arguments.instance))>
AND stats_instance IN (<cfqueryparam value="#arguments.instance#" list="yes"/>)
</cfif>
GROUP BY stats_instance
ORDER BY stats_instance

注意:语法可能因您的数据库引擎而异。

于 2012-10-26T05:59:26.013 回答
0

这样做有什么问题吗?

<cfset myArr = ArrayNew(1) />
<cfloop array="myOtherArr" index="index">
    <cfquery name="myQuery" datasource="myDataSource">...</cfquery>
    <cfset ArrayAppend(myArr, myQuery.value) />
</cfloop>
于 2012-10-25T18:48:06.383 回答