Необходимо изменить MySQL Запрос, чтобы не допускать дублирования записей в таблицу

Во-первых, я новичок в 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));

Буду признателен за любую помощь. Спасибо.

5
задан Kirk Woll 18 April 2012 в 18:35
поделиться