まず第一に、私は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
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");
問題は、Webページが何度もヒットされ、多くのインデックスが作成されると、DROPINDEXクエリが失敗することです。
追加のインデックスを削除する解決策はありますが、他のユーザーから、この方法を完全に避けて、INSERT ... ON DUPLICATE KEYUPDATEhttp://dev.mysql.com/doc/refman/に似た別の方法を試すように言われました 。 5.0 / en / insert-on-duplicate.html
しかし、それを機能させるためにクエリを構築する方法がわかりません。
調査したところ、重複せずにテーブルにデータを入力する方法を説明している次のWebページが見つかりました:http ://www.tutorialspoint.com/mysql/mysql-handling-duplicates.htm
Webページには次の例が記載されています。
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));
助けていただければ幸いです、ありがとうございます。