Php 如何从MySQL表中删除重复项?
可能重复: 我有一个不同页面的表格,但其中一些是重复的。确定重复项的唯一方法是按标题。我运行了下面的代码,它工作得非常好:Php 如何从MySQL表中删除重复项?,php,mysql,sql,database,Php,Mysql,Sql,Database,可能重复: 我有一个不同页面的表格,但其中一些是重复的。确定重复项的唯一方法是按标题。我运行了下面的代码,它工作得非常好: <?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_si
<?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
我只想保留一个。如果pagetitle值相同,但我使用的ID作为标识符的主键不相同,则需要将表本身内部联接并删除
尝试:
参考:选择所有单行,将它们插入临时表,删除所有记录,将它们从临时表中重新插入 使用一些应用程序逻辑:从多行中只选择一行,从表中删除所有行,然后重新插入单个行
DELETE t1 FROM table t1, table t2 WHERE t1.id > t2.id AND t1.name = t2.name
试试这个:
从cms_站点_内容中选择不同的页面标题id
使用上述SQL中的PHP将所有ID保存到idlist,然后执行:
从cms_站点_内容中删除id不在$idlist中的内容
您需要将上述SQL语句转换为PHP/MySQL代码。这行代码:
DELETE t2
FROM cms_site_content t1
JOIN cms_site_content t2 ON (t2.pagetitle = t1.pagetitle AND t2.id > t1.id);
您好,andrei,您能发布表和示例记录的模式吗?谢谢当问这样一个问题时,它会帮助很多:请不要在新代码中使用mysql_*函数。它们不再得到维护,社区已开始恢复。看到了吗?相反,你应该学习并使用或。如果你不能决定,将帮助你做出选择。如果您想学习,。这不是您可以在数据库表上手动完成的事情吗?如果没有,删除重复页面的标准是什么?另请参考:我使用过此代码:我使用过此代码:从“cms_站点_内容”中删除c1内部连接“cms_站点_内容”作为m1.pagetitle=m2.pagetitle上的c2,c1.id c2.id不带*。得到这样一个结果:您的SQL语法有一个错误;检查与您的MySQL服务器版本对应的手册,了解使用m1.pagetitle=m2.pagetitle和c1.id第1行的near'AS c1内部连接cms_站点_内容作为c2的正确语法1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在第1行“c1.pagetitle=c2.pagetitle=c2.pagetitle和c1.ID c2”附近使用的正确语法,这是直接在phpMyAdminDELETE c2中从。。。这是正确的代码:在纯SQL中没有PHP也可以做到。是的,其他帖子更简单
DELETE t2
FROM cms_site_content t1
JOIN cms_site_content t2 ON (t2.pagetitle = t1.pagetitle AND t2.id > t1.id);