Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Walck

[Resolvido] Insert evitando registros duplicados

Recommended Posts

Bom dia Pessoal,

 

Estou fazendo um sistema para importação de um csv de Clientes, só que me deparei com o seguinte problema , como este csv será atualizado é possivel que ele contenha um email que já esta inserido no bd, então gostaria de evitar iso da seguinte forma :

 

Pensei assim faço um select pra ver todos e-mails que tenho cadastrados ai guardo isso em algum lugar , então quando eu for fazer este insert eu comparo se já esta neste "lugar" se tiver eu continuo e vou para o proximo se não eu adiciono no bd e neste "lugar" para evitar que seja inserido repetidamente ou que eu tenha que fazer um novo select... Não sei se fui claro se não fui me avissem que tento explicar melhor , vlaew pessoal segue o codigo como esta agora:

 

$tabela = "teste"; //tabela do banco
$arquivo = 'cat.txt';// aquivo a ver importado txt ou

$arq = fopen($arquivo,'r');// le o arquivo txt
$k = 0;
while( $conteudo = fgets($arq) ){

	if( $k > 0 and trim( $conteudo ) != '' ){
	
	 $rand = mt_rand() . "\n";

		$linha = explode(';', $conteudo);// divide por coluna onde tiver ponto e virgula
		
//$sql = mysql_query("select nome from teste"); // o select que pensei em fazer mais ai travei rs
//while ($dados = mysql_fetch_array($sql)) {

//$nome = $dados['nome']
//		if (

		$sql = "INSERT INTO $tabela (id, empresa, email, status, grupo, rand) VALUES ('', '" . $linha[0] . "', '" . $linha[1] . "', '0', '', '$rand')";
		$result = mysql_query($sql) or die(mysql_error());

	}

	$k++;

$t = $k-1;
}
echo "quantidade de linhas importadas = $t";

?>

Valeuuu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça um SELECT na tabela antes de inserir, caso encontre algum resultado você não insere...

 

Exemplo:

 

if (mysql_num_rows(mysql_query("SELECT * FROM `tabela` WHERE `coluna` = '".$linha[1]."'")) > 0) {

// Já existe na tabela

} else {

// Não existe na tabela

}

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Po ~TiuTalk~ valeu msm a ajuda mas agora deu pau na minha cabeça, não consegui fazer com que ele verique se tem ou não no db, acho que o erro esta no local aonde eu coloquei o if pq ta dentro de um while sei lá heheheh

 

PHP Parse error: syntax error, unexpected '{' in E:\home\anatomic\Web\painel\email\importa.php on line 30

 

o cod esta assim agora:

$arq = fopen($arquivo,'r');// le o arquivo txt
$k = 0;
while( $conteudo = fgets($arq) ){

	if( $k > 0 and trim( $conteudo ) != '' ){
	
	 $rand = mt_rand() . "\n";

	 $linha = explode(';', $conteudo);// divide por coluna onde tiver ponto e virgula
		
if (mysql_num_rows(mysql_query("SELECT * FROM `teste` WHERE `email` = '".$linha[1]."'") > 0) {

 } else {

 $sql = "INSERT INTO $tabela (id, empresa, email, status, grupo, rand) VALUES ('', '" . $linha[0] . "', '" . $linha[1] . "', '0', '', '$rand')";
		$result = mysql_query($sql) or die(mysql_error());
}
	}

	$k++;

$t = $k-1;
}
echo "quantidade de linhas importadas = $t";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Errei ali em cima, a linha correta é essa:

 

if (mysql_num_rows(mysql_query("SELECT * FROM `tabela` WHERE `coluna` = '".$linha[1]."'")) > 0) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Po cara sem palavras pra agradecer msm , to fazendo um sistema pra mailing que vai ficar show , pode ser até reinventar a roda mas a questão é que eu preciso de algumas personalizações que teria q desenvolver msm...

 

E se alguem puder traduzir a logica desta linha , pra que ao invés de copiar eu aprenda eu agradeço ainda mais.... valew

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra você entender, poderia ser feito da seguinte forma:

 

$sql = "SELECT * FROM `tabela` WHERE `coluna` = '".$linha[1]."'"; // Monta uma consulta MySQL

$query = mysql_query($sql); // Executa a consulta

$registros = mysql_num_rows($query); // Retorna o número de registros encontrados pela consulta

if ($registros > 0) { // Ou seja: Verifica se encontrou algum registro

...

--

 

Uma outra saída seria definir a coluna onde o e-mail é salvo como UNIQUE INDEX (indice único) o que não permitirá que você insira valores repetidos. ;)

 

Você pode fazer isso com esse código SQL:

ALTER TABLE `usuarios` ADD UNIQUE (`email`)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tiutalk!

 

Realmente sua resposta é ótima... Testei esses comandos aqui e foi que foi!

Já a dica do eibon não me veio a calhar... :S

 

 

Boa boa! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.