Web サイトからニュース タイトルを取得するための PHP Web スパイダーを作成しました。
タイトルを取得したら、それらを mysql に挿入します。
初めてのときは本当にうまくいきます。
ただし、ジョブは 1 時間ごとに実行されます。
しかし、後で、重複したデータを挿入したくありません。
そのため、mysql に挿入するたびに確認する必要があります。
しかし、そうするのは良い方法ではないと思います。
より良いアイデアはありますか?
質問する
93 次
2 に答える
1
一意のキーを使用して、どの記事を重複として分類するかを自動的に決定できます。
次の例を見てください。
CREATE TABLE IF NOT EXISTS news_items(
id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
title VARCHAR(150) NOT NULL,
create_datetime DATETIME NOT NULL,
description VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX UK_title_create_datetime (title, create_datetime)
)
ENGINE = INNODB;
このテーブルには、タイトルと create_datetime に一意のキーがあります。次の挿入ステートメントは、そのキーのアイテムに一致し、エラーをスローしたり、重複を挿入したりすることなくそれらを無視します。
INSERT IGNORE INTO news_items (title, create_datetime, description) VALUES ('My News Item', '2012-08-30 11:35:00', 'Something newsworthy happened');
次を使用して、一致する行の選択されたフィールドも簡単に更新できますON DUPLICATE KEY UPDATE
。
INSERT INTO news_items (title, create_datetime, description) VALUES ('My News Item', '2012-08-30 11:35:00', 'Something newsworthy happened')
ON DUPLICATE KEY UPDATE
description = VALUES(description);
MySQL のINSERTドキュメントとINSERT ON DUPLICATE KEY UPDATEをご覧ください。
于 2012-08-31T10:43:41.273 に答える
1
あなたは多くのことをすることができます:
- タイトル フィールドで一意になるようにテーブルを変更します。重複したエントリは許可されません。
- タイトルと日付フィールドでテーブルを一意にします - これにより重複は許可されますが、同じ日には許可されません - これにより、同じ名前のニュース記事を入力できるようになります (表示される可能性があり、そこにあるはずです.
- 最初に SQL を実行して、データが既に存在するかどうかを確認します。存在する場合は、挿入しないでください。
于 2012-08-31T10:28:03.477 に答える