如何循环查询数据并插入结构?

How to loop over query data and insert in structure?

我有应该插入到结构中的查询数据。在循环数据时,每个值都应分配给匹配的列。这是查询数据的示例:

    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 语法。如果有人可以帮助我解决这个问题,请告诉我。谢谢。

您的列列表循环存在问题,您正在为每一列创建一个新结构,并在下一个循环中重置。

这个循环应该改变

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;

@espresso_coffee,我已经解决了你的问题。我希望您需要创建一个以键为行数的结构,并且每个键值都应采用结构格式。在这里,我为我的查询提供了一些示例代码。希望对你有用。

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

在我的用户 table 中有 6 条记录,包括名字、姓氏和 ID。在这里,我循环查询并将其转换为结构键值。我使用脚本语法是因为您的代码具有脚本样式。 :)

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

在这里,我将我的第一个结构名称创建为 myStr,并循环查询数据并为当前行的键插入一个结构值,即 readStudent.currentRow 和值在 row 中。具有名字、姓氏和 ID 作为结构键及其值的行。

FYR : 我附上了示例查询并转换为结构值。如果我理解错了请纠正我

希望对您有所帮助。谢谢。

如果我理解正确的话,看起来你可以

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

Runnable example on trycf.com

结果:

备选

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

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

   return result;
}