Ir para o conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

    0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Foto:

Deletar registros com duplicidade

  • Por favor, faça o login para responder
4 respostas neste tópico

#1 Marcelo Kubart

Marcelo Kubart
  • Membros
  • 425 posts

Postado 01 março 2011 - 09:38

Olá Amigos,

Preciso excluir da tabela alguns registros duplicados no campo email

vocês sabem a sql pra mim fazer isso?

Achei esse código na net mas não rolou:

delete from tab p1
   where rowid < (select max(rowid)
                    from tab1 p2
                   where p1.primary_key = p2.primary_key);

Obrigado
Marcelo Kubart
  • 0

#2 XauDH

XauDH
  • Membros
  • 49 posts

Postado 01 março 2011 - 10:46

Se você ainda usa PHP, isso deve resolver. Só alterar onde está coluna e tabela....

<?php

$sql = mysql_query("SELECT coluna, COUNT(*) quant FROM tabela GROUP BY coluna HAVING quant > 1") or die(mysql_error());	

while ($rs = mysql_fetch_assoc($sql)) {	

	extract($rs);	
	$quant--;	
	
	mysql_query("DELETE FROM tabela WHERE coluna ='{$coluna}' LIMIT {$quant}") or die(mysql_error());	

}	

?>

  • 0

#3 Bezerk

Bezerk
  • Membros
  • 115 posts

Postado 01 março 2011 - 11:02

Basta você alterar sua tabela e fazer com que o campo email seja UNIQUE INDEX, assim os valores repetidos serão excluidos e não serão mais ser aceitos.
  • 0

#4 Marcelo Kubart

Marcelo Kubart
  • Membros
  • 425 posts

Postado 01 março 2011 - 11:12

Se você ainda usa PHP, isso deve resolver. Só alterar onde está coluna e tabela....

<?php

$sql = mysql_query("SELECT coluna, COUNT(*) quant FROM tabela GROUP BY coluna HAVING quant > 1") or die(mysql_error());	

while ($rs = mysql_fetch_assoc($sql)) {	

	extract($rs);	
	$quant--;	
	
	mysql_query("DELETE FROM tabela WHERE coluna ='{$coluna}' LIMIT {$quant}") or die(mysql_error());	

}	

?>


Então fiz oque você falou mas não deu certo

<?
//fiz as conexões

$hostname_valerun = "*******";
$database_valerun = "******";
$username_valerun = "******";
$password_valerun = "*********";
$valerun = mysql_pconnect($hostname_valerun, $username_valerun, $password_valerun) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_valerun, $valerun);
$sql = "SELECT email, COUNT(*) quant FROM email_mkt GROUP BY email HAVING quant > 1"; 
$record = mysql_query($sql, $valerun) or die(mysql_error());
while ($rs = mysql_fetch_assoc($record)) { 
        extract($rs);   
        $quant--;
		$del = "DELETE FROM email_mkt WHERE email ='".$rs["email"]."' LIMIT ".$quant;
        mysql_query($sql, $valerun) or die(mysql_error());       
}       

?>

Mas não deu certo

Valeu

Basta você alterar sua tabela e fazer com que o campo email seja UNIQUE INDEX, assim os valores repetidos serão excluidos e não serão mais ser aceitos.


No phpmyadmin tentei colocar index unique mas ele não me deixou por causa te ter dados duplicados

tem algum sql que faça isso a força?
  • 0

#5 senartes

senartes

    Dev noob = new Dev();

  • Membros
  • 865 posts

Postado 03 março 2011 - 10:38

Cara isso aqui ele meio que chuta o balde...

ALTER IGNORE TABLE `suaTabela` ADD UNIQUE INDEX(CampoQueNuncaSeRepetira);

  • 0