【发布时间】:2012-04-19 03:37:16
【问题描述】:
首先,我对 MySQL 还是很陌生,我会边走边学。
我有一个在页面加载时运行的脚本,它检索联合类型数据并将其添加到 MySQL 数据库表中。
我要做的就是将找到的新数据添加到数据库表中,而不添加从前一页面加载中找到的重复数据。
我的数据库表如下:
// Creates a Database Table only if the Table does not already exist
mysql_query("CREATE TABLE IF NOT EXISTS $TableName(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
Field_2 varchar(255) NOT NULL default '',
Post_Date int(11) NOT NULL default '0',
Field_4 varchar(10) NOT NULL default '',
Field_5 varchar(12) NOT NULL default '',
Field_6 longtext NOT NULL default '',
Field_7 longtext NOT NULL default '',
Field_8 longtext NOT NULL default '') ") or die(mysql_error()
);
有一个索引如下图:
Action Keyname Type Unique Packed Column Cardinality Collation Null Comment
Edit Drop PRIMARY BTREE Yes No id 830 A
Post_Date 字段始终是唯一的(UNIX 格式),因此可用于确定重复项。
我目前正在使用以下代码将数据输入到数据库表中,然后删除重复项:
// Enter the $sql Data into the MySQL Database Table
mysql_query("INSERT INTO $TableName (id, Field_2, Post_Date, Field_4, Field_5, Field_6, Field_7, Field_8) VALUES ".implode(',', $sql));
// Removes Duplicates from the MySQL Database Table based on the 'Post_Date' field
mysql_query("Alter IGNORE table $TableName add unique key (Post_Date)");
// Deletes the added index key created by the Removes Duplicates function
mysql_query("ALTER TABLE $TableName DROP INDEX Post_Date");
问题是,如果网页被多次点击并导致创建许多索引,则 DROP INDEX 查询会失败。
虽然我有一个删除附加索引的解决方案,但其他用户告诉我要完全避免这种方法并尝试另一种类似于 INSERT ... ON DUPLICATE KEY UPDATE 的方法 http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
但我不知道如何构造查询以使其工作。
我进行了研究,发现以下网页说明了如何将数据输入到没有重复的表格中:http://www.tutorialspoint.com/mysql/mysql-handling-duplicates.htm
网页说明了这个例子:
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name) -> VALUES( 'Jay', 'Thomas');
但我不知道如何修改我的查询代码以使其正常工作。
我尝试将 IGNORE 添加到查询中,但它也允许重复条目进入表:
mysql_query("INSERT IGNORE INTO $TableName (id, Field_2, Post_Date, Field_4, Field_5, Field_6, Field_7, Field_8) VALUES ".implode(',', $sql));
任何帮助将不胜感激,谢谢。
【问题讨论】:
标签: mysql duplicates