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

问题描述:

我写了一个PHP web蜘蛛来从网站获得新闻标题。
当我得到标题时,我会将它们插入到mysql中。
第一次真的有效。
但是,这些工作将每小时运行一次。
但后来,我不想插入重复的数据。
所以,我需要检查每次当我插入到MySQL。
但我认为这不是一个好办法。
有什么更好的想法?如何以更高效的方式比较mysql中的现有数据?

+0

你还没有尝试过? –

+0

你可以在mysql中使用[ON DUPLICATE KEY UPDATE](http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html)。 –

你可以做一些事情:

  • 更改你的表是在标题领域独树一帜。它不会允许重复的条目。
  • 在标题和日期字段中设置唯一的表格 - 这将允许重复,但不能在同一天 - 这将有助于您输入同名的新闻报道(它们可能会出现在应该应该在那里。
  • 运行一些SQL先来看看数据是否已经存在,而且它是,不要将其插入。

你可以使用一个独特的密钥自动决定哪些文章应该被归类为重复

举例如下:

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