php mysqli删除重复行但具有不同的ID?

时间:2013-04-08 22:22:43

标签: php mysql mysqli

我按以下顺序拥有我的数据库

id  date        time        user_id     visits
---------------------------------------------------------------
1   02/19/13    1361257200  xxxxxxxxx   4699
2   02/20/13    1361343600  xxxxxxxxx   7264
3   02/21/13    1361430000  xxxxxxxxx   5281
4   02/21/13    1361430000  xxxxxxxxx   5281
5   02/22/13    1361516400  xxxxxxxxx   5473

正如你所看到的,我的id为3的行与id为4的第4行相同。我想只删除其中一行(它们都应该具有相同的值date,time,user_id和visit)I我的数据库中还有许多其他重复的行(数百个)。我不知道我必须使用的查询。我尝试搜索某些解决方案,但它们涉及具有相同的ID或将行复制到新表。 注意:即使我必须多次运行此查询,我也没有任何问题。

enter image description here

2 个答案:

答案 0 :(得分:2)

如果ID方式不是一个选项,你可以做的是向表中添加一个唯一的密钥。

如......

ALTER IGNORE TABLE  `tablename` ADD UNIQUE `keyname` (`date` ,`time` , `visits`);

当添加密钥时,表将遍历行,并删除任何匹配的行(重复的)。这样做的缺点是它会阻止任何重复的行再次出现.....根据表的使用情况,这可能是也可能不是问题。

答案 1 :(得分:2)

DELETE t2
FROM `your_table` AS t1
INNER JOIN `your_table` AS t2
  ON t1.date = t2.date
  AND t1.time = t2.time
  AND t1.user_id = t2.user_id
  AND t1.visits = t2.visits
  AND t2.id > t1.id