【问题标题】:Coldfusion loop over insert query valuesColdfusion循环插入查询值
【发布时间】:2017-02-06 19:59:59
【问题描述】:

我正在尝试循环插入查询。我正在循环返回结果在列表中的值。

<cfquery datasource="#OLMSdatasourceWrite#" result="myResult">
    INSERT INTO OLMS_Data_RatioScenarios
    (
        OLMS_Account_ID,
        OLMS_RatioScenario_Name
    )
    VALUES
    (
    <cfloop list="#AccountListWithSettings#" index="CurrentAccount">
        (<cfqueryparam cfsqltype="cf_sql_numeric" value="#CurrentAccount#" maxlength="255">, <cfqueryparam cfsqltype="cf_sql_clob" value="#requestBody.value#" maxlength="255">)
        <cfif CurrentAccount GT 1>
           ,
        </cfif>
    </cfloop>
    )
</cfquery>

<cfoutput>Inserted ID is: #myResult.generatedkey#</cfoutput>

我在这里遇到的问题是它在最后一次迭代之后一直放一个“,”

VALUES ( ( (param 1) , (param 2) ) , ( (param 3) , (param 4) ) , ( (param 5) , (param 6) ) , ) 

我需要帮助找出 cfif 语句来防止这种情况(注意:如果我将 cfif 放在查询参数上方,它会像 (,(param 1),(param 2), 一样开始循环),

【问题讨论】:

  • 你有你的答案。我只是要指出,您应该仔细检查循环遍历列表的index 属性实际代表什么。另外,如果您插入多条记录,您确定myResult.generatedkey 会满足您的需求吗?

标签: mysql coldfusion cfquery cfloop


【解决方案1】:

您需要跟踪列表中的项目数,并检查当前项目的位置是否小于列表的长度:

<cfset numItems = ListLen(AccountListWithSettings)>
<cfset i = 1>

<cfloop list="#AccountListWithSettings#" index="CurrentAccount">
  <!--- Stuff inside of loop --->

  <!--- ...and then --->
  <cfif i lt numItems>
    ,
  </cfif>

  <cfset i++>
</cfloop>

根据@Leigh 的评论更新:您也可以采用这种方法。我将其添加为第二种方法,因为即使它更简单,但我的大脑通常不会如何思考这个特定问题。各有各的。 :)

<cfset i = 1>

<cfloop list="#AccountListWithSettings#" index="CurrentAccount">
  <cfif i gt 1>
    ,
  </cfif>

  <!--- Stuff inside of loop --->

  <cfset i++>
</cfloop>

【讨论】:

  • 那是为了快速反馈,我改变了它,它抛出了这个错误:类型:表达式消息:你试图取消引用 java.lang.String 类型的标量变量作为结构成员。捕获异常,type = Expression
  • 糟糕,我将其视为查询。需要喝完这杯咖啡。将更新我的答案。
  • 提示:您可以简化一点,并通过使用&lt;cfif i gt 1&gt;,&lt;/cfif&gt; 并将其移至循环的开头来消除 numItems 检查。
  • @ChrisPeters - 很公平。我已经使用它这么久了,我发现它更具可读性,但同意它是那些主观的东西之一 :) 旁注,他们终于在 CF2016 中添加了对使用数组和列表循环跟踪位置的支持。所以不再需要手动增加计数器变量(耶!)。 trycf.com/gist/0e76e27359cf1b2d4f875fa84194eb50/…
  • @ChrisPeters - 大声笑,我发誓自从 CF9 左右,可能是 CF7 以来,一个请求已经以一个或另一个化身出现了;-)
猜你喜欢
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多