2012-08-16 57 views
0

在PHPMYAdmin中,我正在運行一個Web爬蟲。網絡爬蟲偶爾會拿起相同的網址。在網絡爬蟲,它已經索引了成千上萬的鏈接,我不想重複的鏈接。有沒有辦法在SQL中刪除類似的行(唯一的區別是id字段)在MYSQL中刪除非常非常相似的行

+0

'id'字段是自動遞增的INT字段嗎? – 2012-08-16 18:34:28

+0

是的,它是一個自動遞增的字段 – 2012-08-16 18:38:49

回答

0

如果你的表名爲the_table及其字段是id(一個獨特的領域)和url,那麼你可以這樣寫:

DELETE 
    FROM the_table 
WHERE id NOT IN 
     (SELECT * 
      FROM (SELECT MIN(id) 
        FROM the_table 
        GROUP BY url 
       ) t 
     ) 
; 

(如果您有其他領域的歡迎,並只希望刪除其中所有領域是相同的,除了id,然後只需添加這些字段的GROUP BY條款連同url行。)

+0

只是FYI,您不能在DELETE操作中的子查詢中引用同一個表。它會拋出這個錯誤:'#1093 - 你無法在FROM子句中指定目標表'the_table'進行更新。 – 2012-08-16 18:42:39

+0

@ZaneBien:哦,我忘了那件事。破解MySQL。現在修好了,謝謝。 :-) – ruakh 2012-08-16 18:52:10

+0

不會做我要求的,我要求刪除重複的數據什麼不是ID標籤的一部分 – 2012-08-16 18:57:01

1

您可以DELETE除了具有最大ID(最近)的所有URL:

DELETE a 
FROM  tbl a 
LEFT JOIN (
      SELECT MAX(id) AS id 
      FROM  tbl 
      GROUP BY url 
     ) b ON a.id = b.id 
WHERE  b.id IS NULL 

完成這一步之後,它可能是建立在URL字段的唯一約束是一個好主意:

ALTER TABLE tbl ADD UNIQUE idx_unique_url (url);