2013-04-10 146 views
0

第一篇文章在這裏。我使用<CFSPREADSHEET>從Excel創建查詢,然後嘗試將查詢結果插入到MySQL表中。這工作正常。我還需要從一列中取值,並將正確的ID號插入表中的ID列。這是我的代碼。我得到的結果是在每個表格行中插入相同的ID(6)。這裏的幫助肯定會被讚賞。謝謝!ColdFusion10 - 通過插入查詢查詢cfloop

<cfspreadsheet action="read" 
src="#myFile#" 
sheet="5" 
excludeheaderrow="true" 
headerrow="1" 
query="newQuery" /> 

<cfloop query="newQuery"> 
    <!--- set ID variables ---> 
    <cfif newQuery.Branch EQ "Army"> 
    <cfset variables.Branch_ID = 6 /> 
    <cfelseif newQuery.Branch EQ "Marine Corps"> 
    <cfset variables.Branch_ID EQ 9 /> 
    <cfelseif newQuery.Branch EQ "Navy"> 
    <cfset variables.Branch_ID EQ 7 /> 
    <cfelseif newQuery.Branch EQ "Air Force"> 
    <cfset variables.Branch_ID EQ 8 /> 
    <cfelseif newQuery.Branch EQ "Coast Guard"> 
    <cfset variables.Branch_ID EQ 10 /> 
    </cfif> 

    <cfquery name="importXLS" datasource="memorials_mysql"> 
    INSERT INTO honorees_temp(FirsttName,MName,LastName,Branch,Branch_ID,Unit) 
    VALUES 
    ('#Trim(FirstName)#', 
    '#Trim(MName)#', 
    '#Trim(LastName)#', 
    '#Trim(Branch)#', 
    #variables.Branch_ID#, 
    '#Trim(Unit)#') 
    </cfquery> 
</cfloop> 
+0

什麼是ID字段? MySQL中的ID是一個字段,應該是auto_increment,但不是? – Busches 2013-04-10 14:25:33

+0

如果分支表中存在'Branch_ID',則還可以使用'INSERT/SELECT'從另一個表中選擇ID並在同一語句中插入這些值,並刪除if/else塊。 – Leigh 2013-04-11 17:19:16

回答

0

每次循環時都將您的variables.brand_id重置爲0。您的IF語句可能沒有匹配,因此它保留了每個未來不匹配記錄的最後匹配值。

<cfspreadsheet action="read" 
       src="#myFile#" 
     sheet="5" 
     excludeheaderrow="true" 
     headerrow="1" 
     query="newQuery" /> 
<cfloop query="newQuery"> 
    **<cfset variables.Branch_id=0>** 
     <!--- set ID variables ---> 
     <cfif newQuery.Branch EQ "Army"> 
      <cfset variables.Branch_ID = 6 /> 
     <cfelseif newQuery.Branch EQ "Marine Corps"> 
      <cfset variables.Branch_ID = 9 /> 
     <cfelseif newQuery.Branch EQ "Navy"> 
      <cfset variables.Branch_ID = 7 /> 
     <cfelseif newQuery.Branch = "Air Force"> 
      <cfset variables.Branch_= EQ 8 /> 
     <cfelseif newQuery.Branch EQ "Coast Guard"> 
      <cfset variables.Branch_ID = 10 /> 
     </cfif> 

    <cfquery name="importXLS" datasource="memorials_mysql"> 
      INSERT INTO honorees_temp(FirsttName,MName,LastName,Branch,Branch_ID,Unit) 
      VALUES 
       ('#Trim(FirstName)#', 
       '#Trim(MName)#', 
       '#Trim(LastName)#', 
       '#Trim(Branch)#', 
       #variables.Branch_ID#, 
       '#Trim(Unit)#') 
</cfquery> 
</cfloop> 
4

一個問題是您的cfset語句中有語法錯誤。在cfset中,您需要使用=而不是EQ

<!--- set ID variables ---> 
    <cfif newQuery.Branch EQ "Army"> 
     <cfset variables.Branch_ID = 6 /> 
    <cfelseif newQuery.Branch EQ "Marine Corps"> 
     <cfset variables.Branch_ID =9 /> 
    <cfelseif newQuery.Branch EQ "Navy"> 
     <cfset variables.Branch_ID =7 /> 
    <cfelseif newQuery.Branch EQ "Air Force"> 
     <cfset variables.Branch_ID = 8 /> 
    <cfelseif newQuery.Branch EQ "Coast Guard"> 
     <cfset variables.Branch_ID =10 /> 
    </cfif> 

你對newQuery.Branch的價值是什麼?如果if語句中沒有任何內容匹配,它將保留最後一個值,因爲它沒有被重新初始化。

您也應該在INSERT語句中使用<cfqueryparam>

此外,這是個人喜好,但使用cfswitch比使用多個else if語句更有效。

<cfswitch expression="#trim(newQuery.Branch)#"> 
    <cfcase value="Army" > 
    <cfset Branch_ID = 6 />  
    </cfcase> 
    <cfcase value="Marine Corps" > 
    <cfset Branch_ID = 9 />  
    </cfcase> 
    <cfcase value="Navy" > 
    <cfset Branch_ID = 7 />  
    </cfcase> 
    <cfcase value="Air Force" > 
    <cfset Branch_ID = 8 />  
    </cfcase> 
    <cfcase value="Coast Guard" > 
    <cfset Branch_ID = 10 />  
    </cfcase> 
    <cfdefaultcase> 
    <!--- set either a default value or throw an error, depending on your needs ---> 
    <cfset Branch_ID = 0> 
    <cfthrow message="Invalid Branch_ID"> 
    </cfdefaultcase> 
</cfswitch> 
+0

也可以提一下,這個if語句是switch語句的完美設置。另外,他在插入時修剪()'newQuery.Branch',而不是'cfif' [e]向該開關添加默認情況。 – Busches 2013-04-10 14:35:54

+0

謝謝馬特!顯然這解決了這個問題。我非常感謝快速幫助。希望我能在未來提供一些答案。 – RobK 2013-04-10 14:37:14

+0

@Busches我更新了這兩個增強 – 2013-04-10 14:38:46