2016-05-17 2 views
3

У меня есть задача обновить/вставить некоторые поля в две разные таблицы. Прежде чем запустить свое обновление, я должен получить значения из моего запроса и поместить их в структуру, где одним из моих значений должен быть ключ. Мой запрос выглядит следующим образом:Строить структуру и затем заполнить значениями из запроса?

<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

фразы, как «не работает» очень неоднозначно. Каков фактический результат кода выше? Что вы ожидали вместо этого? * Прежде чем я запустил мое обновление, мне нужно получить значения из моего запроса и поместить их в структуру. * Просто любопытно, но зачем это нужно? Причина для запроса - это похоже на возможное осложнение. – Leigh

+0

Я просто получил ошибку на экране. Почему я хочу поместить их в структуру до запуска обновления? Я должен, потому что значения нужно сравнивать с записями из CSV-файла, а затем я должен проверить, совпадают ли они, если они создают список для значений, которые соответствуют, а затем используют этот список для обновления/вставки. –

+1

Предлагаю совершенно другой подход. Начните с загрузки файла csv в отдельную таблицу. Независимо от того, сделано это с ColdFusion или без него, это не имеет значения. Затем используйте комбинацию промежуточных таблиц и sql-запросов, чтобы определить, какие данные должны быть записаны, а затем записать необходимые данные. –

ответ

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

... где '1' представляет значение ключа или getRecords.USER_ID. – Leigh

Смежные вопросы