2011-12-30 94 views
0

我大多隻使用ColdFusion的查詢,直到現在從來沒有需要的結構或任何對象符號。我正在使用的服務器沒有打開調試,只有一個「500內部服務器錯誤」,所以我不明白爲什麼我的代碼不工作,可悲的是我沒有能力打開調試。coldfusion結構語法和查詢數據

通過試驗和錯誤與評論塊出我已經注意到錯誤發生在我的結構行,並將結構添加到我的數組。從我讀過的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

那麼,你的結構鍵值的名稱中有錯別字,對於初學者來說:getMemebers!= getMembers。 – 2011-12-30 05:53:20

回答

5

我除了肖恩的評論,我相信你有從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> 
+0

我應該指出,在我的例子中,我完全刪除了'i'變量,而是選擇了內置的CF Array操作函數ArrayAppend。這樣你就可以減少一個變量來處理。 – 2011-12-30 06:50:19

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的答案效果很好。

+0

地圖表可悲地在一個單獨的數據庫中,我可以在CF中的數據庫中加入嗎?我已經嘗試過,只能得到錯誤。 – rajh2504 2011-12-30 15:47:31

+0

通常,是的。假設數據源帳戶對*兩個*數據庫都有權限。 – Leigh 2011-12-30 17:26:28

+0

如果數據庫都是Microsoft SQL Server,我一定知道你可以。您將不得不完全限定FROM子句中的數據庫表。我更新了上面的查詢以包含完全限定數據庫表的示例。 – 2011-12-31 22:01:50

0

如果您要加入多個數據庫,請確保您在將充當主鍵/外鍵的列上創建非聚集索引。

+0

我不確定你的意思是非聚集索引,你能告訴我一個例子嗎? – rajh2504 2012-01-04 20:59:20