【问题标题】:Coldfusion loop query results and update using dynamic column namesColdfusion循环查询结果并使用动态列名更新
【发布时间】:2018-10-30 15:18:08
【问题描述】:

在数据库中,我有 5 列加上 id:

 id, m1, m2, m3, m4, m5

我根据 id 从一个可能有 1 到 5 行的表中进行选择:

row,id,value
 1, 1, 'A'
 2, 1, 'B'
 3, 1, 'C'

等 我需要做的是用值 A、B 和 C 更新用户表中的用户表中的 m1、m2 和 m3 列,其值为 A、B 和 C。我已经开始了这样的道路,但在星期二遇到了严重的星期一大脑。

i=1;
  cfloop (query=q) {
    field = 'm' & i;
    temp = invoke(myCFC,"updateUser",{ userid=q.id, field = q.value });
    i++;
  };

其中“字段”是 m1、m2、m3。一种方法是在记录数上使用 switch/case 并进行 5 次不同的调用,但不确定是否有更好的编程方式?

[edit] 这可行,但可能不是最好的方法 - 我有 1-5 的案例:

switch(qryM.recordCount) {
case "1":
    temp = invoke(userCFC,"updateUser", { 
        id = qryM.rsm_userid, 
        m1_c = qryM["rsm_c"][1], 
        m1_m = qryM["rsm_m"][1]
    });
    break;
case "2":
    temp = invoke(userCFC,"updateUser", { 
        id = qryM.rsm_userid, 
        m1_c = qryM["rsm_c"][1], 
        m1_m = qryM["rsm_m"][1],
        m2_c = qryM["rsm_c"][2], 
        m2_m = qryM["rsm_m"][2]
    });     
    break;

【问题讨论】:

  • cfloop 是什么?这种语法对我来说很陌生。会不会是CFScript中的for循环,如果不是CFScript,那就是<cfloop>标签?
  • 我正在使用 for / in 循环,但看到一篇博客文章 cfloop(query=, group=) 等有效。在今天之前我从未见过它。运行 CF2016 更新 7.
  • 你说得对,这行得通。我完全错过了,我将不得不做一些阅读。
  • cfloop() 将在 cfscript 中工作。几乎所有标签在 cfscript 中都可以这样工作。它对于制作纯 cfscript 的东西很有用,但它可能会导致奇怪。在这种情况下,我会选择 for-in 解决方案。
  • 您是更新所有 5 列,还是只更新其中之一?如果您遍历您的 query2 以对每一行进行 query1.column 更新,那么您将在数据库上受到打击。您可以使用 PIVOT 做您想做的事。你有样本数据吗?还有一些期望?

标签: coldfusion cfloop


【解决方案1】:

如果真的最多只能有五行并且目标列始终是“m”+当前行号,那么这将起作用:

for (row in q) {
    myCFC.updateUser(userid:row.id, field:'m#q.CurrentRow#');
}

【讨论】:

  • 列将是 m1、m2、m3、m4、m5,值将是 qryM["rsc_m"][currentrow] - 尽管在动态字段名称部分,我不断收到错误。如果我定义了所有 5 个字段名称但只有前 3 行的值会发生什么?如果查询记录数为 3 并且我尝试为第 4 行或第 5 行输入一个值,qryM[rsc_m][5] 是否会引发错误?
  • 好吧,有了for ... in 循环,您就不需要使用[CurrentRow] 引用。当只有 3 行时,查询只运行 3 次,是的,当您尝试访问第 4 行时会出现错误。我承认仍然不太确定问题是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 2019-03-03
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多