スクリプトでこのループを実行する方法を見つけようとしています。
<cfquery>
<cfloop from="1" to="#arrayLen(myData)#" index="i">
<!--- update query with different paramaters --->
</cfloop>
</cfquery>
このようにループの外で実行できますが、遅いです:
for(i=1; i LTE arrayLen(myData); i++)
{
q = new Query();
q.setSql(" UPDATE SQL HERE ");
q.addParam(name="id", value=i);
q.Execute().GetResult();
}
SQLの外側ではなく、SQLの中でそれを行いたいです。
更新: これがコードです。分かりやすくするために、一部削除してみました。
ユーザーがデータを入力するフォームがあり、これが呼び出されます。
for(i=1; i LTE listlen(arguments.myStruct.myfield1); i++) {
myfield1 = listgetAt(arguments.myStruct.myfield1,i);
for(j=1; j LTE arguments.myStruct.count; j++) {
maxvalue = form["max" & j];
myType = form["myType" & j];
id = myfield1;
local.queryService = new Query();
local.queryService.setSql
("
UPDATE mytypes
SET maxvalue = :maxvalue,
myType = :myType
WHERE mytypeID = :id
");
local.queryService.addParam(name="id", value=id);
local.queryService.addParam(name="maxvalue", value=maxvalue, cfsqltype="cf_sql_integer");
local.queryService.addParam(name="myType", value=myType, cfsqltype="cf_sql_integer");
local.queryService.Execute().GetResult();
}
}