2012-07-06 96 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