Coldfusion循环查询结果并使用动态列名进行更新

时间:2018-10-30 15:18:08

标签: coldfusion cfloop

在数据库中,我有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更新用户ID 1的用户表中的m1,m2和m3列。我已经开始了类似的工作,但在周二碰到了严重的星期一脑。

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

其中“字段”为m1,m2,m3。一种方法是在recordcount上使用一个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;

1 个答案:

答案 0 :(得分:0)

如果实际上最多只能有五行,并且目标列始终是“ m” +当前行号,则可以这样做:

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