如何以更高效的方式比较mysql中的现有数据?
问题描述:
我写了一个PHP web蜘蛛来从网站获得新闻标题。
当我得到标题时,我会将它们插入到mysql中。
第一次真的有效。
但是,这些工作将每小时运行一次。
但后来,我不想插入重复的数据。
所以,我需要检查每次当我插入到MySQL。
但我认为这不是一个好办法。
有什么更好的想法?如何以更高效的方式比较mysql中的现有数据?
答
你可以做一些事情:
- 更改你的表是在标题领域独树一帜。它不会允许重复的条目。
- 在标题和日期字段中设置唯一的表格 - 这将允许重复,但不能在同一天 - 这将有助于您输入同名的新闻报道(它们可能会出现在应该应该在那里。
- 运行一些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
你还没有尝试过? –
你可以在mysql中使用[ON DUPLICATE KEY UPDATE](http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html)。 –