Php SQL:是否删除重复的行?(菲律宾)
我有以下数据库,想删除红色的,因为它们是双重的。因此,我必须检查每一行是否有另一行通过pid、价格、价格、链接和店铺匹配 但是我如何检查它,如何删除它呢 也许更简单的方法是从每行中的值生成一个id。因此,如果行中的值相等,那么id也相等,并且只有一个值可以与另一个id进行比较。 这是更好的方法吗如果是,我怎么做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 完成后,
你好 您是否无法获取可以使用添加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(自动递增)和创建日期/时间。