Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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 删除mysql中的重复行,保留XX行_Php_Mysql - Fatal编程技术网

Php 删除mysql中的重复行,保留XX行

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 (

我想保留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 (
        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个记录,其中包含任何较大的重复值。