Php 删除mysql中的重复行,保留XX行
我想保留10个最新的重复行,并删除所有其他行 我正在使用下面的代码,但它会删除除一条以外的所有记录Php 删除mysql中的重复行,保留XX行,php,mysql,Php,Mysql,我想保留10个最新的重复行,并删除所有其他行 我正在使用下面的代码,但它会删除除一条以外的所有记录 DELETE FROM `history` WHERE id NOT IN (SELECT * FROM (SELECT MIN(n.id) FROM history n GROUP BY n.url) x)` 请尝试此查询 此代码将删除所有重复行,其中重复行数超过10个 DELETE FROM `history` WHERE id NOT IN ( SELECT * FROM (
DELETE FROM `history` WHERE id NOT IN (SELECT * FROM (SELECT MIN(n.id) FROM history n GROUP BY n.url) x)`
请尝试此查询
此代码将删除所有重复行,其中重复行数超过10个
DELETE FROM `history` WHERE id NOT IN (
SELECT * FROM (
SELECT MIN(n.id) FROM history n GROUP BY n.url having count(n.url) > 10
) x
)
试试这段代码
DELETE
FROM
history
WHERE
id NOT IN
(SELECT
id
FROM
(
SELECT
@num:=IF(@current=url, @num+1, 1) AS row_num,
@current:=url AS group_url,
id
FROM
history
ORDER BY
id
) AS `internal`
WHERE
row_num<=15
)
考虑将DDLs和/或SqLFIDLE连同期望的结果一起选择所有重复行,然后删除这些行并在其后插入一个插入。为什么需要10个重复的行;SELECT MINn.id FROM history仅返回一行为什么您希望它保留10行?也许您可以从如何检索每个组的前10条记录开始。关于这个主题有很多信息,所以请四处看看。这段代码删除所有行并保留一行。不符合我的要求此代码在PHP中不起作用。如果我没说错的话@num:=不能与php一起使用。您只需输入[Query],然后在mysql中运行即可。它不会为每个URL返回稳定的结果。有时保留10,有时保留4,有时删除所有。它的更改保留重复值上的值。如果我们有39个副本,它将保留30个记录。它必须保存至少9个10或11个记录,其中包含任何较大的重复值。