簡體   English   中英

如果行存在則更新mySQL / PHP,否則在要檢查的列不唯一時插入

[英]mySQL/PHP to update if the row exists or else insert when column to check is not unique

我已經閱讀了關於REPLACE和INSERT ON DUPLICATE鍵查詢的信息,雖然我可以看到它們很有用,但它們似乎並沒有達到我的目的。 也許我的數據庫設計與應有的設計背道而馳,但是無論哪種方式,我都希望我能使它正常工作。

我正在嘗試建立一個網上商店來自學mysql和php,並且正在記錄一個會話ID,以便將個人購物車撤回進行個人訪問,並嘗試將存貨寫入存在問題的購物車正在嘗試檢查商品是否在購物車中。 我希望每個用戶的每個項目都是唯一的,但是對於整個表格而言,每個項目都不應該唯一,否則這將阻止多個用戶購買同一項目,不是嗎?

到目前為止,我的表如下所示:

 | Cart ID(key) | USER_ID(fk) | ItemNum | ItemQTY |

我本質上是想查看USER_ID的購物車中是否已經有> 0個ItemNum的ItemNTY。 如果他們願意,我希望itemQTY更新到itemQTY +,但是他們添加了很多,如果沒有,則插入新行。

為此,我必須先查詢嗎?

對於初學者...我認為只運行查詢以檢查是否存在就可以了。 然后,當您通常更熟悉php和mysql時,就開始積累知識。

其他人可能會不同意,但是在學習新語言時,我喜歡先使事物生效,然后再使其變得“完美”。

您可以編寫一個存儲過程,並使用該存儲過程來處理插入。

您將需要學習有關編寫存儲過程並從PHP執行它們的知識。

同樣,在存儲過程中,您將需要執行多個查詢,但是對於您的應用程序,它看起來像是對該過程的單個調用。

HTH。

我認為您需要在CartID和ItemNum上使用多列唯一鍵:

alter table my_table add unique( CartID, ItemNumber );

然后,您可以執行以下操作:

insert into my_table values( 1, 'joe', 12345, 1 ) on duplicate key update ItemQTY = ItemQTY + 1;

傳統的購物車軟件每位用戶只有一個購物車,每當用戶返回時,該購物車都會恢復。 因為您同時具有CartIDUserID ,所以給人的印象是用戶可以擁有多個購物車。

鑒於最好有三個表。 UsersCartItems CartsCartItems Carts CartItems

Users將需要一個UserIDCarts將需要CartID以及類似OwnerID (引用Users.UserID )之類的東西,而CartItems將具有CartID (引用Carts.CartID ), ItemIDQuantity

您甚至可以變得更加簡單,因為一個用戶只能擁有一個Cart,因此您可以完全忽略Cart表並將CartItems.CartID替換為CartItems.OwnerID (引用Users.UserID

我希望這是有幫助的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM