Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 SQL:是否删除重复的行?(菲律宾)_Php_Mysql_Sql_Duplicates - Fatal编程技术网

Php SQL:是否删除重复的行?(菲律宾)

Php SQL:是否删除重复的行?(菲律宾),php,mysql,sql,duplicates,Php,Mysql,Sql,Duplicates,我有以下数据库,想删除红色的,因为它们是双重的。因此,我必须检查每一行是否有另一行通过pid、价格、价格、链接和店铺匹配 但是我如何检查它,如何删除它呢 也许更简单的方法是从每行中的值生成一个id。因此,如果行中的值相等,那么id也相等,并且只有一个值可以与另一个id进行比较。 这是更好的方法吗如果是,我怎么做 你好 您是否无法获取可以使用添加uniqie id的不同行 ALTER TABLE my_table ADD id int NOT NULL AUTO_INCREMENT 完成后,

我有以下数据库,想删除红色的,因为它们是双重的。因此,我必须检查每一行是否有另一行通过pid、价格、价格、链接和店铺匹配

但是我如何检查它,如何删除它呢

也许更简单的方法是从每行中的值生成一个id。因此,如果行中的值相等,那么id也相等,并且只有一个值可以与另一个id进行比较。 这是更好的方法吗如果是,我怎么做


你好

您是否无法获取可以使用添加uniqie id的不同行

ALTER TABLE my_table
 ADD id int NOT NULL AUTO_INCREMENT
完成后,可以在id不是最小值的情况下使用not,该最小值按定义复制所需的值分组

delete from my_table 
where id  NOT in ( select min(id) from my_table
                  group by shop, link 
                  )

最简单的方法是运行
distinct
查询:

select distinct pid, price, price_old, link, shop
from t;
您可以使用
创建一个新表。这是最简单的方法。因为所有列都是相同的,所以MySQL不提供删除重复行的简单方法(同时保留其中一行)


但是,您当前的结果可能是由查询生成的。如果是这样,您可以将
选择distinct
添加到查询中。但是,最好修复查询,使其不会生成重复项。如果是这种情况,请使用示例数据、所需结果(文本而非图像)和当前使用的查询询问另一个问题。

首先在测试表上测试:

DELETE t1 
FROM t t1, t t2 
WHERE t1.id > t2.id AND t1.price = t2.price 
    AND t1.link = t2.link AND t1.shop = t2.shop 
    AND t1.price_old = t2.price_old;
基本上,如果这些参数相等,您将删除ID最高的参数

select * from 
(select pid, price, price_old, link ,
row_number() over(partition by pid, price, price_old, link, shop order by pid) as rank
from my_table) temp
where temp.rank = 1
此查询将首先按所有列分组并对它们进行排序。重复行的秩将大于1。我们取第一行或第二行并不重要,因为它们都是彼此的副本。我们只取排名为1的行。不重复的行也将具有秩1,因此不会被忽略

另一种方法是使用union

select * from my_table UNION select * from my_table

我还没有身份证。。。我怎样才能让我从这些值生成一个ID——pid、price、price\u old、link和shop?不,它不是来自一个查询。我有一个cronjob,每24小时运行一次。但我的问题是,这个Cronjob会添加新数据,有些值仍然与之前的Cronjob中的值相同,但有些值与之前的Cronjob中的值不同。所以我唯一的办法就是删除所有重复的行,同时保留其中一行。@Jan。您应该修复cron作业,使其不会插入重复的值。此外,每行(至少)应具有唯一的id(自动递增)和创建日期/时间。