Как зациклить данные запроса и вставить в структуру? - PullRequest
3 голосов
/ 30 мая 2019

У меня есть данные запроса, которые должны быть вставлены в структуру.При зацикливании данных каждое значение должно быть присвоено соответствующему столбцу.Вот пример данных запроса:

    REC_ID  NAME    STATUS      TYPE    YEAR
1   01      PARIS   Approved    1       2019
2   06      AUSTIN  Inactive    3       2017
3   48      LONDON  Approved    2       2018
4   43      ROME    Inactive    5       2019
5   61      DUBLIN  Inactive    4       2019

Эти данные должны быть организованы так:

1
  REC_ID  01
  NAME    PARIS
  STATUS  Approved
  TYPE    1
  YEAR    2019
2
  REC_ID  06
  NAME    AUSTIN
  STATUS  Inactive
  TYPE    3
  YEAR    2017
3
  REC_ID  48
  NAME    LONDON
  STATUS  Approved
  TYPE    2
  YEAR    2018
4
  REC_ID  43
  NAME    ROME
  STATUS  Inactive
  TYPE    5
  YEAR    2019
5
  REC_ID  61
  NAME    DUBLIN
  STATUS  Inactive
  TYPE    4
  YEAR    2019

Я попытался получить желаемый формат данных с помощью этой функции:

function formatData(qryData) {
    local.fnResult = structNew();
    local.fnData = structNew();

    if(qryData.recordcount){
        for(row in qryData) {
            for(column in qryData.columnList) {
                local.strRec = structNew();
                structInsert(strRec, column, row[column]);
                local.fnData[qryData.currentrow] = strRec;
            }
        }
    }

    writeDump(fnData);
}

Вот как выглядит мой результат:

1
  REC_ID  01
2
  REC_ID  06
3
  REC_ID  48
4
  REC_ID  43
5
  REC_ID  61

Я использую синтаксис ColdFusion 11 cfscript.Если кто-то может помочь мне решить эту проблему, пожалуйста, дайте мне знать.Спасибо.

Ответы [ 3 ]

4 голосов
/ 30 мая 2019

Существует проблема с вашим циклом списка столбцов, вы создаете новую структуру для каждого столбца и получаете сброс в следующем цикле.

Эта петля должна быть изменена

for(column in qryData.columnList) {
    local.strRec = structNew();
    structInsert(strRec, column, row[column]);
    local.fnData[qryData.currentrow] = strRec;
}

чтобы выглядеть как

local.strRec = structNew();
for(column in qryData.columnList) {
    structInsert(strRec, column, row[column]);
}
local.fnData[qryData.currentrow] = strRec;
2 голосов
/ 30 мая 2019

@ espresso_coffee, здесь я рассмотрел вашу проблему. Я надеюсь, что вам нужно создать структуру с ключом в качестве числа строк, и каждое значение ключа должно быть в формате структуры. Здесь я приведу пример кода для моего запроса. Я надеюсь, что это полезно для вас.

<cfquery name="readStudent" datasource="student">
    select * from  user
</cfquery>

В моей пользовательской таблице 6 записей с именем, фамилией и идентификатором. Здесь я перебираю запрос и преобразовываю его в значения структурных ключей. Я использовал синтаксис скрипта, потому что ваш код имеет стиль скрипта. :)

<cfscript>
    myStr = {};
    for (row in readStudent) { 
        structInsert(myStr, #readStudent.currentrow#, row);
    }
    writeDump(myStr);
</cfscript>

Здесь я создаю свое первое имя структуры как myStr, зацикливаю данные запроса и вставляю структурное значение для ключа с текущей строкой, равное readStudent.currentRow , а значение находится в строке . Строка, имеющая имя, фамилию и идентификатор в качестве структурного ключа и его значение.

БЮР: Я приложил пример запроса и преобразовал его в структурное значение. Поправь меня, если я неправильно понял твою проблему

enter image description here

Надеюсь, это поможет вам. Благодарю.

1 голос
/ 30 мая 2019

Если я правильно понимаю, похоже, вы могли бы просто

array function formatData(qryData) {
   return DeserializeJSON(SerializeJSON(arguments.qryData, "struct"));
}

Пример запуска на trycf.com

Результат:

Screenshot of result

Alternative

array function formatData(qryData) {
   var result = [];

   for (var row in qryData) {
       result.append(row);
   }       

   return result;
}
...