如何以更有效的方式比较mysql中的现有数据?

时间:2012-08-31 10:23:45

标签: php

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

2 个答案:

答案 0 :(得分:1)

你可以做很多事情:

  • 在标题字段中将表格更改为唯一。它不允许重复输入。
  • 在标题和日期字段中使表格唯一 - 这将允许重复,但不会在同一天 - 这将有助于您输入具有相同名称的新闻文章(它们可能会出现,应该< / em>在那里。
  • 首先运行一些SQL以查看数据是否已经存在,并且它是,不要插入它。

答案 1 :(得分: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;

此表在title和create_datetime上有唯一的键。 以下insert语句将匹配该键上的项,并忽略它们而不会引发错误或插入重复项。

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