使用php从mysql中删除重复项

使用php从mysql中删除重复项,php,mysql,sql,Php,Mysql,Sql,这包括两个表:“wp_额外数据”和“wp_帖子”。wp_额外_数据包含字段“id”、“post_id”和“post_title_md5”。现在我需要弄清楚如何从“post_title_md5”中检索重复的内容,然后*从wp_posts中删除,其中id=wp_extra_data->post_id,除了最旧的post_id(即id最低的一个)* 例如: wp_额外_数据可能包含: ID post_id post_title_md5 23 45 322a85c7502dfb2fce5bbd

这包括两个表:“wp_额外数据”和“wp_帖子”。wp_额外_数据包含字段“id”、“post_id”和“post_title_md5”。现在我需要弄清楚如何从“post_title_md5”中检索重复的内容,然后*从wp_posts中删除,其中id=wp_extra_data->post_id,除了最旧的post_id(即id最低的一个)*

例如: wp_额外_数据可能包含:

ID post_id post_title_md5
23 45      322a85c7502dfb2fce5bbd6794c00f81
56 92      322a85c7502dfb2fce5bbd6794c00f81
75 12      322a85c7502dfb2fce5bbd6794c00f81

在这种情况下,我希望脚本“从wp_posts中删除,其中id=92和12”。因此,简而言之,我如何有效地从wp_extra_数据中检索重复项,然后删除除具有最低键(id)的数据之外的所有数据。可能值得注意的是,我不知道什么是“post_title_md5”将提前执行。

检索重复哈希很容易:

mysql_query("Delete from wp_posts where ID not in
(select post_id from wp_extra_data where id in(select min(ID)
from wp_extra_data
group by post_title_md5))")
SELECT post_title_md5
FROM wp_extra_data
GROUP BY post_title_md5
HAVING COUNT(post_title_md5) > 1
然后,您可以将上述内容作为子查询的一部分来检索post_id:

SELECT post_id
FROM wp_extra_data
WHERE (post_title_md5 IN (... previous query here ...));

但是,这将使用重复的散列检索所有ID。因此,您必须在PHP端进行一些筛选,并在删除“第一个”后仅删除剩余的ID一个。

你的意思是你不会提前知道列名,还是你不会知道列中包含的值?@George我的意思是我不会知道值。我想这是你要求的……你想删除任何重复项,以便每个哈希都是唯一的……这就是这个查询的作用……你还想让它做什么?@therealmitchconnors我需要确保它只从wp_帖子中删除最新的条目。这取决于wp_extra_数据中哪一行的ID最低-最旧的需要保留,其余的需要删除。因此,您不想从wp_extra_数据中删除,而是从wp_帖子中删除,它们共享ID?在表“wp_extra_data”中的字段“post_ID”保存“wp_posts”中字段“ID”的值,因此如果你知道我的意思,我需要“从wp_posts中删除ID=wp_extra_data->post_ID”。好的,我修改了这个示例来实现这一点。谢谢!数组+计数器是有效的还是我又在编愚蠢的工作循环?