coldfusion struct语法和查询数据

时间:2011-12-30 05:48:47

标签: coldfusion struct

到目前为止,我几乎只使用coldfusion进行查询,从不需要结构或任何对象表示法。我正在处理的服务器没有打开调试只是一个“500内部服务器错误。”所以我无法看到为什么我的代码不工作,可悲的是我没有能力打开调试。

通过试验和错误注释阻止我注意到我的结构行中发生了错误,并将结构添加到我的数组中。从我读过的CF文档中我没有看到任何语法错误,但是如果我有任何错误的逻辑或可能出错的话,我们将非常感谢任何帮助。

 <cfset dataArray = []>
 <cfset i = 0>
 <cfloop query="getMembers">
        <cfquery name="getmaps" datasource=“a" dbtype="odbc">
        SELECT       member_id, mlong, mlat
        FROM         maps 
        WHERE       member_id = '#getMembers.MemberID#'
        </cfquery>
        <cfif getmaps.recordcount eq 1>
            <!--- temp structure to insert into array --->
            <cfset dataTemp = {
                memberID = getMemebers.memberID, 
                name = getMemebers.MemberName, 
                long = getmaps.mlong, 
                lat = getmaps.mlat 
            }>
            <cfset dataArray[i] = dataTemp>
            <cfset i++>
        </cfif>
    </cfloop>

3 个答案:

答案 0 :(得分:5)

除了Shawn的评论之外,我相信你在将数组索引设置为0时会有问题,而不是1. Coldfusion将数组索引从1开始。

编辑更多建议:

<cfset dataArray = []>
 <cfloop query="getMembers">
        <!--- Not usually a good idea to query each time through a loop - should be able to do a single query outside it --->
        <cfquery name="getmaps" datasource=“a" dbtype="odbc">
        SELECT       member_id, mlong, mlat
        FROM         maps 
        WHERE       member_id = <cfqueryparam value='#getMembers.MemberID#' cfsqltype="cf_sql_varchar"><!--- assuming varchar since you had quotes around it --->
        </cfquery>
        <cfif getmaps.recordcount eq 1>
            <!--- temp structure to insert into array --->
            <cfset dataTemp = {
                memberID = getMembers.memberID, 
                name = getMembers.MemberName, 
                long = getmaps.mlong, 
                lat = getmaps.mlat 
            }>
            <cfset ArrayAppend(dataArray,dataTemp)>
        </cfif>
</cfloop>

答案 1 :(得分:3)

您应该考虑将两个查询合并为一个查询。

<cfquery name="qryMemberMaps" datasource="a" dbtype="ODBC">
SELECT
    members.memberID, members.MemberName,
    maps.mlong, maps.mlat
FROM
    [members_database].dbo.members JOIN [maps_database].dbo.maps ON members.memberID = maps.member_id
</cfquery>

当您只需要一个查询时,当前方法可能会生成数千个查询!

每当您发现自己循环查询并调用其他查询时,最好修改原始查询并保存锤击数据库服务器。

为了将数据放入结构数组中,Jake的答案很有效。

答案 2 :(得分:0)

如果要连接多个数据库,请确保在将作为主键/外键的列上创建非聚集索引。