3

可能重复:
仅使用 MySQL 查询删除重复项?

我有一个包含不同页面的表格,但其中一些是重复的。确定重复的唯一方法是通过标题。我运行下面的代码,它运行良好:

<?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 />';
}

?>

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

重复文章:3

我只想保留一个。

4

5 回答 5

8

您需要INNER JOIN在表本身上删除pagetitle值相同但primary key(我使用 ID 作为标识符)不是的位置。

尝试:

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

于 2012-08-10T15:47:10.440 回答
0

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

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

于 2012-08-10T15:47:19.440 回答
0

这条线醒了:

DELETE t2
FROM cms_site_content t1
JOIN cms_site_content t2 ON (t2.pagetitle = t1.pagetitle AND t2.id > t1.id);
于 2012-08-10T16:32:20.437 回答
0

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

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

从 cms_site_content 中删除 id 不在 ($idlist)

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

于 2012-08-10T15:51:02.600 回答
-2

尝试这个

DELETE t1 FROM table t1, table t2 WHERE t1.id > t2.id AND t1.name = t2.name
于 2012-08-10T15:49:32.530 回答