2012-08-31 50 views
-8

我寫了一個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)。 –

回答

1

你可以做一些事情:

  • 更改你的表是在標題領域獨樹一幟。它不會允許重複的條目。
  • 在標題和日期字段中設置唯一的表格 - 這將允許重複,但不能在同一天 - 這將有助於您輸入同名的新聞報道(它們可能會出現在應該應該在那裏。
  • 運行一些SQL先來看看數據是否已經存在,而且它是,不要將其插入。
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