對於這個漫長的問題抱歉,我想我會涵蓋我嘗試過的一切!SOL/ColdFusion:插入來自會話的多個外鍵
我有一個購物車應用程序,用於存儲在數組中選擇的項目,然後將這些項目傳遞給OrderItems表以存儲在數據庫中。然後,orderItems表中的條目可以作爲客戶的分項訂單頁面輸出,例如,如果他們想查看過去的訂單。
我想循環瀏覽會話,並確定session.itemid屬於哪個產品表,並在此基礎上向OrderItems表中插入屬於正確PK列名稱的ID。
例如CFDUMP session.cart的:
每個上述項屬於一個單獨的表。
的OrderItems表
itemID int
orderID nvarchar(10)
ticketperformanceID int
ticketparkingID int
accommCategoryID int
itemCost decimal(6, 2)
當前代碼,工程部分,如果只有一個項目是在車這個執行好了,但它存儲的itemid在所有3列,而不是匹配的一ID列名稱。此外,如果我有多個不同ID的項目,則會返回錯誤。請在下面的代碼後查看錯誤代碼。
<cfquery name="addOrder" datasource="sql1007539" result="insert">
INSERT INTO orders
(customerID
,orderDate
,orderValue)
values ('#cust.customerID#', '#DateFormat(Now())#','#variables.totalprice#')
</cfquery>
<cfquery name="orderItems" datasource="sql1007539">
insert into orderItems (
orderID,
ticketperformanceID
,ticketparkingID
,accommCategoryID
,itemCost
)
values('#insert.GENERATEDKEY#', '<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].price#<cfelse>#session.cart[i].price#, </cfif></cfloop></cfoutput>')</cfquery>
</cftransaction>
<cfoutput> Your order has been committed</cfoutput>
錯誤,如果不同的ID的多個項目,是session.cart:
Error Executing Database Query.
[Macromedia][SQLServer JDBC Driver][SQLServer]Conversion failed when converting the varchar value '1, 2, 101' to data type int.
The error occurred in C:/ColdFusion10/cfusion/wwwroot/ce0932a/coursework/process.cfm: line 28
26 :)
27 :
28 : values('#insert.GENERATEDKEY#', '<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].price#<cfelse>#session.cart[i].price#, </cfif></cfloop></cfoutput>')</cfquery>
29 : </cftransaction>
30 :
VENDORERRORCODE 245
SQLSTATE 22018
SQL insert into orderItems (orderID, ticketperformanceID ,ticketparkingID ,accommCategoryID ,itemCost) values('81', '1, 2, 101','1, 2, 101','1, 2, 101','75.00, 20.00, 10.00')
DATASOURCE sql1007539
Resources:
試圖與該作品,如果有多個項目下面玩但是它使用相同的ID填充所有三個ID列,並且它只存儲一個項目的一個條目而不是數量,即。我有兩個量,所以我想這兩個項目存儲爲單獨的記錄:
<cfloop from="1" to="#ArrayLen(SESSION.cart)#" index="i">
<cfquery name="orderItems" datasource="sql1007539">
insert into orderItems (
orderID,
ticketperformanceID
,ticketparkingID
,accommCategoryID
,itemCost
)
values('#insert.GENERATEDKEY#','#session.cart[i].itemid#', '#session.cart[i].itemid#', '#session.cart[i].itemid#', '#session.cart[i].price#'
)
</cfquery>
</cfloop>
<cfoutput> Your order has been committed</cfoutput>
代碼,這會產生錯誤:
<cfloop from="1" to="#ArrayLen(SESSION.cart)#" index="i">
<cfquery datasource="sql1007539">
INSERT INTO orderItems(
orderID
,ticketperformanceID
,ticketparkingID
,accommCategoryID
,itemCost
where ticketperformanceID='#SESSION.cart[i].itemid#' and ticketparkingID='#SESSION.cart[i].itemid#' and accommCategoryID='#SESSION.cart[i].itemid#';)
VALUES('#insert.GENERATEDKEY#', '#SESSION.cart[i].itemid#', '#SESSION.cart[i].price#')
</cfquery>
</cfloop>
錯誤:
錯誤執行數據庫查詢。 [Macromedia] [SQLServer JDBC驅動程序] [SQLServer]關鍵字'where'附近的語法不正確。
錯誤發生在C:/ColdFusion10/cfusion/wwwroot/ce0932a/coursework/process2.cfm:線29
27:其中ticketperformanceID = '#SESSION.cart [I] .itemid#' 和ticketparkingID ='#SESSION.cart [i] .itemid#'和accommCategoryID ='#SESSION.cart [i] .itemid#';) 28:
29:VALUES('#insert.GENERATEDKEY#','#SESSION .cart [i] .itemid#','#SESSION.cart [i]。價格#') 30: 31:
我在我無計可施這樣結束了,不知道從哪裏何去何從......
使用ColdFusion 10 SQL 2008 R2
老實說,我看到的最大的問題是你的表結構。當您有多個存儲相同類型對象的列時,它通常是您需要[標準化]的標誌(http://msdn.microsoft.com/zh-cn/library/ms191178%28v=SQL.105%29)。 ASPX)。例如,將每個項目存儲在單獨的記錄中,即'orderID,itemID,itemCost'。 「item」表本身應該包含項目的「類型」(停車,表演等)。 – Leigh
謝謝Leigh,我應該在問題中提到這一點。我有兩個表,一個是Orders表,它存儲了(OrderID,CustomerID,Date,ValueofOrder)。好吧,我會放棄這一點。 –
工程就像一個魅力!我不敢相信我沒有想到這一點,現在我的問題是數量,你會建議我添加一個數量列並記錄多少樹枝? –