-8

Web サイトからニュース タイトルを取得するための PHP Web スパイダーを作成しました。
タイトルを取得したら、それらを mysql に挿入します。
初めてのときは本当にうまくいきます。
ただし、ジョブは 1 時間ごとに実行されます。
しかし、後で、重複したデータを挿入したくありません。
そのため、mysql に挿入するたびに確認する必要があります。
しかし、そうするのは良い方法ではないと思います。
より良いアイデアはありますか?

4

2 に答える 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 に答える