Во-первых, я новичок в 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
Поле Сообщение _Дата всегда уникально (Формат 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 UPDATEhttp://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));
Буду признателен за любую помощь. Спасибо.