我有应插入到结构中的查询数据。循环数据时,应将每个值分配给匹配的列。这是查询数据的示例:
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语法。如果有人可以帮助我解决此问题,请告诉我。谢谢。
答案 0 :(得分:4)
列列表循环有问题,您正在为每个列创建一个新结构,并在下一个循环中重置。
此循环应更改
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;
答案 1 :(得分:2)
@espresso_coffee,在这里,我解决了您的问题。我希望您需要创建一个具有键作为行数的结构,并且每个键值都应采用结构格式。在这里,我为查询提供了一些示例代码。希望对您有用。
<cfquery name="readStudent" datasource="student">
select * from user
</cfquery>
在我的用户表中有6条记录,记录中包含名字,姓氏和ID。在这里,我遍历了查询并将其转换为结构键值。我使用脚本语法是因为您的代码具有脚本样式。 :)
<cfscript>
myStr = {};
for (row in readStudent) {
structInsert(myStr, #readStudent.currentrow#, row);
}
writeDump(myStr);
</cfscript>
在这里,我将第一个结构名称创建为myStr,并遍历查询数据,并为键的结构行插入当前行为 readStudent.currentRow 的值,该值位于行中。具有名字,姓氏和ID作为结构键的行及其值。
FYR::我已经附加了示例查询并转换为结构值。如果我错理解您的问题,请纠正我
希望对您有所帮助。谢谢。
答案 2 :(得分:1)
如果我正确理解这一点,看来您可以做到
array function formatData(qryData) {
return DeserializeJSON(SerializeJSON(arguments.qryData, "struct"));
}
结果:
替代
array function formatData(qryData) {
var result = [];
for (var row in qryData) {
result.append(row);
}
return result;
}