PHP-删除具有相同引用的重复值

PHP-删除具有相同引用的重复值,php,mysql,select,duplicates,Php,Mysql,Select,Duplicates,我有一个名为store的MySQL表 现在我将输出排除在外,如下所示: id ref item_no supplier 1 10 x1 usa 3 11 x1 china 4 12 x2 uk 5 12 x3 uk 6 13 x3 uk 正如您可以看到的那样,项目编号x1和x3具有相同的参考号和供应商来源,因此我想要删除重复记录,以便仅保留一个项目编号 我创建此PHP代码仅用于选择结果: $query1

我有一个名为store的MySQL表

现在我将输出排除在外,如下所示:

id ref item_no supplier
1  10    x1      usa
3  11    x1      china
4  12    x2      uk
5  12    x3      uk
6  13    x3      uk
正如您可以看到的那样,项目编号x1和x3具有相同的参考号和供应商来源,因此我想要删除重复记录,以便仅保留一个项目编号

我创建此PHP代码仅用于选择结果:

$query1 = "SELECT 
                DISTINCT(item_no) AS field, 
                COUNT(item_no) AS fieldCount, 
                COUNT(ref) AS refcount 
            FROM 
                store 
            GROUP BY item_no HAVING fieldCount > 1";

$result1 = mysql_query($query1);

if(mysql_num_rows($result1)>0){
    while ($row1=mysql_fetch_assoc($result1)) {
        echo $row1['field']."<br /><br />";
    }
} else {
    //IGNORE
}
在创建删除查询之前,如何告知查询根据我的需要正确选择重复记录


谢谢大家

您可以使用以下查询生成所需的结果集:

选择t1* 从存储为t1 参加 选择MINid作为id、ref、项目号 从商店 按参考分组,项目编号 如t1.id>t2.id和t1.ref=t2.ref和t1.item_no=t2.item_no 要删除,您可以使用:

删除t1 从存储为t1 参加 选择MINid作为id、ref、项目号 从商店 按参考分组,项目编号 如t1.id>t2.id和t1.ref=t2.ref和t1.item_no=t2.item_no
如果希望选择要删除的行,请使用

select *  from  store 
where id not in (
    select max(id)  from  store 
    group by  distinct ref, item_no, supplier);
或者,您可以直接使用命令直接删除

delete from  store 
where id not in (
    select max(id)  from  store 
    group by  distinct ref, item_no, supplier);

若要仅查找可以使用的重复记录,请执行以下操作:

 SELECT * FROM store WHERE id NOT IN 
 (SELECT id FROM store AS outerStore WHERE id = 
 (SELECT MAX(id) FROM store AS innerStore 
 WHERE outerStore.ref = innerStore.ref AND 
 outerStore.supplier = innerStore.supplier AND outerStore.item_no = innerStore.item_no))

可能很长,但它应该可以工作。

可能重复感谢您的回答,我将尝试您告知我的代码。我会很快回复,我已经试过了,但它没有选择重复的。它列出了所有项目编号。还有为什么选择id?我想要ref和供应商,如果他们是相同的also@AliHamraSELECT查询选择除重复项以外的所有内容。我以为这是你的意图。哦,糟糕,我想要相反的结果。我想列一份清单duplicates@AliHamra请检查我所做的编辑:t1.id>t2.id而不是t1.id=t2.id谢谢你的回答,但它显示了MySQL错误MySQL_num_rows期望参数1是resource…..我已经用select更新了答案,以获取要删除的行候选项根据你的代码,它似乎应该可以工作,但我仍然收到相同的mysql错误:。可能是tbale名称中有错误。。我已经更新了答案。。有了正确的表名,不管它是否长,查询本身是否正确,但它会输出空记录:…我不明白为什么,我想我找到了问题所在..如果我从代码中删除outerStore.ref=innerStore.ref和outerStore.supplier=innerStore.supplier,它的工作,但不是我所期望的…它只列出重复的项目在我的本地基地与您的数据工作。mysql\u num\u rows$result1是否返回0?
 SELECT * FROM store WHERE id NOT IN 
 (SELECT id FROM store AS outerStore WHERE id = 
 (SELECT MAX(id) FROM store AS innerStore 
 WHERE outerStore.ref = innerStore.ref AND 
 outerStore.supplier = innerStore.supplier AND outerStore.item_no = innerStore.item_no))