构建结构,然后使用查询中的值填充?

时间:2016-05-17 18:33:07

标签: sql struct coldfusion structure

我有任务在两个不同的表中更新/插入一些字段。在我运行更新之前,我必须从查询中获取值并将它们放在结构中,其中一个值应该是键。我的查询如下:

<cfquery name="getRecords" datasource="test">
    Select 
         s.ID
         ,f.USER_ID
         ,s.USER_NUMBER
         ,s.STATUS
         ,f.DINING 
    From USERS s
         Left Outer Join FIELDS f ON s.ID = f.USER_ID   
</cfquery>

我需要USER_NUMBER作为我的结构中的键,并存储上述查询中的所有其他值。我将使用此结构来比较我的其他列表中的值,然后构建我将用于更新/插入的最终列表。我尝试过类似下面的代码,但它不起作用:

以下是使用手动查询的独立示例:

<cfset getRecords = queryNew("")>
<cfset queryAddColumn(getRecords, "ID", [1,2,3])>
<cfset queryAddColumn(getRecords, "USER_ID", ["userA","userB","userC"])>
<cfset queryAddColumn(getRecords, "STATUS", ["Active","Active","Active"])>
<cfset queryAddColumn(getRecords, "DINING", ["X","Y","Z"])>

<cfset myStruct = StructNew()>

<cfloop query="getRecords">
    <cfset myStruct = [key:#USER_NUMBER#{
                                         id:#ID#
                                         ,userid:##USER_ID
                                         ,status:#STATUS#
                                         ,dining:#DINING#
                                        }]>
</cfloop>

如果有人可以帮助您使用此代码,请告知我们。我通常使用数组,但这次我必须使用struct,因为其他一些原因。谢谢。

1 个答案:

答案 0 :(得分:3)

我相信你只需要将你的键移动到一个级别,这样循环就不会覆盖这些值。所以试试像:

<cfset myStruct = StructNew()>

<cfloop query="getRecords">
    <cfset myStruct[getRecords.USER_ID] = {
        id:getRecords.ID,
        userid:getRecords.USER_ID,
        status:getRecords.STATUS,
        dining:getRecords.DINING
    }>
</cfloop>

然后,要访问变量,您可以使用以下内容:

<cfoutput>#htmlEditFormat(myStruct[1].dining)#</cfoutput>