去年,我發佈了一個問題here關於提交一個50字段的表單,以及最好的方法來做到這一點。該解決方案仍在使用中,運行良好。然而,爲了構建這些動態查詢,我最終得到了很多重複的<cfif>
,我想知道是否有更好的方法來處理這個問題。雖然代碼結束了「雜亂」,但由於這一點,db當然非常乾淨,並且寫入次數也保持在最低限度,但有沒有更好的方法來執行以下操作?將大型表格保存到多個表格,規範化和動態查詢
<cfif StructKeyExists(arguments.form,"data1") or StructKeyExists(arguments.form,"data2") or StructKeyExists(arguments.form,"data3")>
<cfquery>
insert into table1 (
<cfif StructKeyExists(arguments.form,"data1")>data1,</cfif>
<cfif StructKeyExists(arguments.form,"data2")>data2,</cfif>
<cfif StructKeyExists(arguments.form,"data3")>data3,</cfif>
userid
)
values (
<cfif StructKeyExists(arguments.form,"data1")><cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.form.data1#" maxlength="30">,</cfif>
<cfif StructKeyExists(arguments.form,"data2")><cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.form.data2#" maxlength="10">,</cfif>
<cfif StructKeyExists(arguments.form,"data3")><cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.form.data3#" maxlength="25">,</cfif>
<cfqueryparam cfsqltype="cf_sql_smallint" value="#arguments.form.userid#" maxlength="5">
)
on duplicate key update
<cfif StructKeyExists(arguments.form,"data1")>data1=values(data1),</cfif>
<cfif StructKeyExists(arguments.form,"data2")>data2=values(data2),</cfif>
<cfif StructKeyExists(arguments.form,"data3")>data3=values(data3),</cfif>
userid=values(userid)
</cfquery>
</cfif>
這種'感覺'出於某種原因是錯誤的。難道例如更加聰明,能,而有更多的寫操作,每個值分割到自己的更新,就像這樣:
<cfif StructKeyExists(arguments.form,"data1")>
<cfquery>
insert into table1 (data1,userid)
values (<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.form.data1#" maxlength="30">,<cfqueryparam cfsqltype="cf_sql_smallint" value="#arguments.form.userid#" maxlength="5">)
on duplicate key update data1=values(data1),userid=values(userid)
</cfquery>
</cfif>
等
還是有更好的方式來做到這一點,我完全可以俯瞰?!
對不起,我本來應該更清晰,但它不是很*是*一致。我重寫了這個問題的命名,但它更像arguments.form.departure_date/arguments.form.staffid/arguments.form.otherinfo等。我可以循環arguments.form我假設,但值進入不同的表( staffid進入表2,其他信息進入表3等),並且沒有自動的方式知道哪個值在哪個表中。 – sckd
_「有沒有自動的方式知道」_ - 所以使用手動方式;每個表都有一個數組,它可以接收可能的字段,並循環這些數據。 –
好吧,我循環遍歷arguments.form,然後使用一堆包含每個表的字段以及cfqueryparam的sql類型和maxlength的數組來匹配更新的字段,然後對每個更改執行一次插入/更新?這肯定會讓代碼更加乾淨!因此,就我原來的問題而言,在一次寫入可能包含多個值的情況下,最終還會產生大量單寫操作?感謝所有的建議;絕對在這裏學習很多! – sckd