Localizando registros duplicados no MySQL

Localizando registros duplicados no MySQL
4.3 7

Infelizmente nem sempre um banco de dados é criado da forma correta, acarretando além dos diversos problemas, a duplicidade de dados, então é necessários fazer a normalização de um banco de dados, e é muito comum que se começe removendo os registros duplicados.

Para remover registros duplicados existem N métodos, o maior problema é: Como localizar esses registros?

A primeira vista isso realmente parece algo difícil, mas uma query simples resolve tudo, abaixo o script completo:

<?php
$servidor = "localhost";//Geralmente é localhost mesmo
$nome_usuario = "root";//Nome do usuário do mysql
$senha_usuario = ""; //Senha do usuário do mysql
$nome_do_banco = "receitas"; //Nome do banco de dados

$conecta = mysql_connect($servidor,$nome_usuario,$senha_usuario) or die (mysql_error());
mysql_select_db($nome_do_banco,$conecta) or die (mysql_error());

$sql = mysql_query("SELECT *, COUNT(email) reg_dup FROM usuarios GROUP BY email HAVING reg_dup > 1");

while ($dados = mysql_fetch_array($sql)){
extract($dados);
echo $email.' - '.$reg_dup.'<br>';
}
?>


Neste exemplo hipotético a query busca dados de uma tabela chamada usuarios, ele busca os dados duplicados na coluna email, apenas são exibidos os dados que tiverem dois ou mais dados repetidos na referida coluna, no while nós montados os dados exibindo primeiro o e-mail que está duplicado e após a quantidade de vezes que ele aparece duplicado na tabela.

Para remover os duplicados, uma das soluções possíveis é, dentro do while montar outra query removendo os e-mails duplicado, só cuidado, se existem 3 e-mails duplicados, basta remover dois, ou seja, o número de linhas a serem removidas é o que estiver em $reg_dup - 1.

Para testar o exemplo, você pode usar a tabela abaixo:
CREATE TABLE `usuarios` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `nome` varchar(50) default NULL,
  `email` varchar(50) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM ;


Basta copiar e colar no phpmyadmin, popular (inserir dados) e rodar o script após configurar os dados de acesso (usuário, senha, etc...).

Comentários (7)

  • Joao Carlos da Silva

    Muito obrigado. Salvou meu dia! Abraço!

    23 de Maio de 2017 às 01:55
  • Valmor

    Muito bom e muito bem explicado!! muito Obrigado!

    18 de Maio de 2016 às 15:32
  • Edu

    muito bom!

    19 de Fevereiro de 2016 às 11:26
  • Fabiano da Silva

    Parabéns estava precisando dessa dica ai, foi de muita utilidade para mim. Obg

    24 de Setembro de 2015 às 22:51
  • Víctor Hugo Meloque

    Olá amigo, seu post me ajudou muito parabéns!!!

    Mas sem querer abusar (já abusando), existe uma forma do script fazer a verificação de duplicidade em duas colunas? Comparando por exemplo DDD e número de telefone. Se puder me ajudar... Valeu!!!

    06 de Novembro de 2013 às 15:06
  • Thavia

    Como faço para exibir todos os registros sem ficarem duplicados?

    14 de Setembro de 2013 às 01:03
  • Contato Feira Líder

    Belo poste, site bem organizado. Fica com Deus.

    19 de Julho de 2013 às 17:49

Comente =)

Atenção: Todos os comentários são moderados, por isto não perca seu tempo postando bobagens ou spam.