如何从MySQL表中删除重复项?

时间:2012-08-10 15:43:59

标签: php mysql sql database

  

可能重复:
  Remove duplicates using only a MySQL query?

我有一个包含不同页面的表,但其中一些是重复的。确定重复项的唯一方法是按标题。我运行下面的代码,它完美地运行:

<?php

mysql_connect("localhost", "root", "root") or die(mysql_error());
mysql_select_db("old") or die(mysql_error());
$result = mysql_query("SELECT pagetitle, COUNT( * ) c
FROM cms_site_content
GROUP BY pagetitle
HAVING c >1") or die(mysql_error());  
while($row = mysql_fetch_array($result)){
    echo $row['id'].'-'.$row['pagetitle'].'<br />';
}

?>

我的问题是:如何删除重复项并仅保留一个条目。例如,如果我有一篇名为“Duplicate Article”的文章,结果是

  

重复文章:3

我想只保留一个。

5 个答案:

答案 0 :(得分:8)

您希望自己INNER JOIN表并删除pagetitle值相同但primary key(我使用ID作为标识符)不在的位置。< / p>

尝试:

DELETE c2 FROM `cms_site_content` c1 INNER JOIN
               `cms_site_content` c2
          ON c1.pagetitle = c2.pagetitle AND c1.ID <> c2.ID

参考http://dev.mysql.com/doc/refman/5.0/en/join.html

答案 1 :(得分:0)

选择所有单行,将它们插入临时表,删除所有记录,然后从temp

中插入它们

使用一些应用程序逻辑:从每个多行中只选择一个,从表中删除所有,然后插入单个

答案 2 :(得分:0)

试试这个: SELECT DISTINCT pagetitle,id,FROM cms_site_content

将所有ID保存到idlist,使用上面的SQL中的PHP,然后执行:

DELETE FROM cms_site_content WHERE id not in($ idlist)

您需要将上述SQL语句转换为PHP / MySQL代码。

答案 3 :(得分:0)

这条线开了:

DELETE t2
FROM cms_site_content t1
JOIN cms_site_content t2 ON (t2.pagetitle = t1.pagetitle AND t2.id > t1.id);

答案 4 :(得分:-2)

试试这个

DELETE t1 FROM table t1, table t2 WHERE t1.id > t2.id AND t1.name = t2.name