【发布时间】:2013-03-11 05:49:49
【问题描述】:
试图弄清楚如何使用脚本执行此循环。
<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 中做,而不是在它之外。
更新: 这是代码。我试图删除一些以使其更简单。
我有一个用户输入数据的表单,然后称为:
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();
}
}
【问题讨论】:
-
你问的是cfscript中cfloop的语法吗? Using CFScript statements 不知道如何转化为 railo。
-
.. 或者您只是对基于标签的版本有问题?如果是这样,请发布您尝试过的
sql以及任何错误消息。另外,您的数据库类型是什么?您在谈论多少更新? -
我可以这样做:for(i=1; i LTE arrayLen(myData); i++) { q = new Query(); local.queryService.setSql("这里更新 SQL"); q.addParam(name="id", value=i); q.Execute().GetResult();但我想在 SQL 中做,而不是在它之外。
-
其他问题呢:数据库类型和更新次数?
-
对不起,我错过了。使用 MySQL 大约 100 个左右。
标签: coldfusion railo cfml