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 querySELECT col1, count(*) as num
FROM tabella
GROUP BY col1
HAVING num > 1
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.
$sql = "SELECT col1, count(*) as num FROM tabella GROUP BY col1 HAVING count(*) > 1 ORDER BY col1 desc";
$result = mysql_query($sql);
while ($r = mysql_fetch_array($result))
{
$col1 = $r["col1"];
$num = $r["num"];
$num_del = $num - 1;
mysql_query("DELETE FROM tabella WHERE col1 = '$col1' LIMIT $num_del");
}