Individuare e cancellare i record duplicati in MySQL
15 Marzo 2010 PHP
   

Individuare i record duplicati

Per individuare i record duplicati all'interno di una tabella si può utilizzare la seguente query

  1. SELECT col1, count(*) as num
  2. FROM tabella
  3. GROUP BY col1
  4. HAVING num > 1
  5. ORDER BY num desc;

che individua tutti i record della tabella tabella che hanno lo stesso valore del campo col1 e li restituisce ordinandoli, in ordine decrescente, secondo il numero di duplicati presenti.  

Cancellare i record duplicati

Una volta individuati i record duplicati possono essere cancellati tutti oppure si può decidere di lasciare una sola copia per ogni record duplicato.
Per cancellare tutti i record duplicati lasciando però una copia per ogni record duplicato si può utilizzare uno script, ad esempio in php.

  1. $sql = "SELECT col1, count(*) as num FROM tabella GROUP BY col1 HAVING count(*) > 1 ORDER BY col1 desc";
  2. $result = mysql_query($sql);
  3.  
  4. while ($r = mysql_fetch_array($result))
  5. {
  6. $col1 = $r["col1"];
  7. $num = $r["num"];
  8. $num_del = $num - 1;
  9.  
  10. mysql_query("DELETE FROM tabella WHERE col1 = '$col1' LIMIT $num_del");
  11. }