2012-07-06 147 views
0

我有一個與descriptionId作爲主鍵的mysql表,它是自動遞增的。它還具有「內容」和「價格」等欄目。「在重複更新插入」仍然插入重複項

我也有一個由多個輸入框組成的表格,其中包含我的描述表中的價格和內容列的當前數據庫值。提交表單後,我想用新值更新表格,如果刪除了任何輸入框,則必須從表格中刪除該記錄。

我也設法定義了三個數組來保存我所有表格的列的值。這些數組如下所示:$ descrId,$ content,$ price

當我提交我的表單時,php文件循環遍歷這些數組並執行以下查詢:(我驗證了這些數組,因此它們工作得很好)

INSERT INTO  
description(descriptionId,content,price,orderNo,salesPerson,dateTime,updated) 
VALUES('{$descrId[$k]}','{$content[$k]}','{$price[$k]}','{$orderId}','{$sale}',NOW(),1) 
ON DUPLICATE KEY UPDATE content=VALUES(content),price=VALUES(price),updated=1, dateTime=NOW() 

但是,這個查詢不斷重複值,我按任何時候提交。

我很欣賞你的時間....

+0

我沒有看到鑰匙來檢查重複或我錯過了什麼? – Peon 2012-07-06 09:20:50

+0

'DESC description'請。 – Leigh 2012-07-06 09:21:00

+2

你對那些不想重複的列有獨特的關鍵嗎?當你自動增加時你也不需要插入'descriptionId'。 – arnep 2012-07-06 09:21:08

回答

1

當我讀到你的問題ON DUPLICATE KEY不會發生,因爲你的主鍵是一種自動遞增的值,這將是+1,每次你插入的東西在表,所以它永遠不會有重複的價值 - 這或多或少落後於AUTO INCREMENT

因此,答案是挑選另一列,即orderNodateTime,使其成爲UNIQUE,然後再次嘗試查詢。

更新
另外,您可以將兩個或多個列,它們定義爲(唯一的)關鍵。
如果這也不適用於您的情況,那麼在插入數據時使用一些散列函數/算法,並將該散列沿表中的其他值存儲。

+0

感謝你的快速回復。沒有其他列可以在我的表中唯一,因爲它們傾向於具有共同的值。無論如何,我可以解決這個問題嗎? – theWebLover 2012-07-06 09:45:27

+0

哦。 dateTime是。謝謝你,我會在一秒鐘內嘗試一下。 – theWebLover 2012-07-06 09:46:32

+0

即使不是'orderNo'?你對同一個「不」有不同的描述嗎? 'dateTime'將會是另一個候選人,最終 – Havelock 2012-07-06 09:46:53