到目前为止,我几乎只使用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>
答案 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)
如果要连接多个数据库,请确保在将作为主键/外键的列上创建非聚集索引。