Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从MySQL表中删除重复项?_Php_Mysql_Sql_Database - Fatal编程技术网

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);