2012-10-25 51 views
1

我想查询一个数据库,下面有cfml(sql)语句,但我希望能够从数组中获得每个stat_instance的结果,最后一行包含循环,我认为应该从数组中产生每个值的查询用于数据库查询的Coldfusion数组查询

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> 

回答

1

如果我正确理解你的问题,你可能需要通过stats_instance在查询中使用GROUP BY子句,以便将总和/平均数值。例如:

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 

注意:根据数据库引擎的不同,语法可能有所不同。

+0

感谢您的建议,即时尝试实现的是每个stat_instance生成数据,可以说我只有一个实例,它使用该实例在WHERE语句并生成一个,但是当我有一个实例数组时,我希望sql语句为它在数组循环中看到的每个stat_instance生成数据 – deetu

0

这样做有什么问题吗?

<cfset myArr = ArrayNew(1) /> 
<cfloop array="myOtherArr" index="index"> 
    <cfquery name="myQuery" datasource="myDataSource">...</cfquery> 
    <cfset ArrayAppend(myArr, myQuery.value) /> 
</cfloop> 
+0

感谢您的建议,我试图实现的是每个stat_instance生成数据,可以说我只有一个实例,它在WHERE语句中使用该实例并生成一个,但是当我有一个实例数组时,我想要的sql语句生成数据为每个stat_instance它看到的数组循环中的数组 – deetu