Результаты запроса и обновление цикла Coldfusion с использованием динамических имен столбцов - PullRequest
0 голосов
/ 30 октября 2018

В базе данных у меня есть 5 столбцов плюс идентификатор:

 id, m1, m2, m3, m4, m5

Я выбираю из одной таблицы, которая может иметь от 1 до 5 строк на основе идентификатора:

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

и т.д. Что мне нужно сделать, это обновить столбцы m1, m2 и m3 в пользовательской таблице для идентификатора пользователя 1 со значениями A, B и C. Я начал идти по пути чего-то подобного, но во вторник я начинаю серьезно думать в понедельник.

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

Где «поле» будет м1, м2, м3. Одним из способов было бы использовать переключатель / регистр на счете записи и иметь 5 различных вызовов, но не уверен, что будет лучший способ программно?

[править] это работает, но может быть не лучшим способом - у меня есть случаи на 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 голосов
/ 30 октября 2018

Если на самом деле может быть только пять строк, а целевой столбец всегда равен «m» + номер текущей строки, то это будет работать:

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