我有一个包含不同页面的表,但其中一些是重复的。确定重复项的唯一方法是按标题。我运行下面的代码,它完美地运行:
<?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
我想只保留一个。
答案 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
答案 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