-8

我编写了一个 PHP 网络蜘蛛来从网站获取新闻标题。
当我得到标题时,我会将它们插入到 mysql 中。
第一次真的很管用。
但是,这些作业将每小时运行一次。
但后来,我不想插入重复的数据。
所以,我每次插入mysql时都需要检查。
但我认为这不是一个好方法。
有更好的想法吗?

4

2 回答 2

1

你可以做很多事情:

  • 将您的表格更改为在标题字段上是唯一的。它不允许重复条目。
  • 使表格在标题和日期字段上唯一 - 这将允许重复,但不能在同一天 - 这将有助于您输入具有相同名称的新闻文章(它们可能会出现并且应该在那里。
  • 首先运行一些 SQL 来查看数据是否已经存在,并且它是,不要插入它。
于 2012-08-31T10:28:03.477 回答
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 回答