Синтаксис структуры Coldfusion и данные запроса - PullRequest
0 голосов
/ 30 декабря 2011

В основном я использовал только 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 ]

5 голосов
/ 30 декабря 2011

В дополнение к комментарию Шона, я думаю, у вас возникнет проблема с началом индекса массива с 0, а не с 1. Coldfusion начинает индексы массива с 1.

edit Еще несколько предложений:

<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>
3 голосов
/ 30 декабря 2011

Вы должны рассмотреть возможность объединения двух запросов в один запрос.

<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>

Текущий метод может потенциально генерировать тысячи запросов, когда вам нужен только один!

Каждый раз, когда вы обнаруживаете, что зацикливаетесьзапрос и вызов других запросов - это хорошая идея, чтобы пересмотреть исходный запрос и сэкономить ресурсы вашего сервера баз данных.

Для размещения данных в массив структур ответ Джейка работает хорошо.

0 голосов
/ 30 декабря 2011

Если вы объединяете несколько БД, убедитесь, что вы создали некластеризованный индекс для столбцов, которые будут действовать как первичные / внешние ключи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...