Ir para conteúdo

POWERED BY:

Arquivado

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

maum

Duplicando registros mesmo com "on duplicate key update"

Recommended Posts

Olá galera!

 

Estou criando um cadastro para newsletter, se o email já existe iria apenas alterar e assim não seria inserido um novo mas isso não acontece, ao visitar o banco de dados vejo que fica duplicado ou até mais que isso, vários iguais.

 

mysqli_query($connect, "insert into news (id,email,valid) values (null,'$email',0) on duplicate key update email='$email'");

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela tem uma Chave Primária ou ùnica ? Desculpe se a pergunta parece tola.

Compartilhar este post


Link para o post
Compartilhar em outros sites

giesta, eu tenho a dúvida quanto á orientação sobre REPLACE ou INSERT INTO .. ON DUPLICATE KEY UPDATE.

 

Desculpe se estou fugindo um pouco do objetivo do tópico, mas acredito que possa ser útil.

 

Acho que a diferença de um para o outro, seria que, quando o REPLACE encontra a chave primária existente, ele apaga para inserir o registro "mais atualizado", e o INSERT INTO .. ON DUPLICATE KEY UPDATE, teria uso quando fosse uma alteração em um campo, somente, um exemplo, seria uma tabela de estoque, pois ao vender um equipamento, eu tenho que diminuir os itens do estoque, estou certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá galera!

 

Agradeço desde já ajuda de vocês!

 

Vamos lá!

 

Cliente entra na loja, gosta, se inscreve na newsletter. A loja envia um email de validação ao futuro cliente.

 

Digamos que por acaso o cliente se inscreva novamente, isso para não duplicar os registros, apenas atualizar o existente.

 

mysqli_query($connect, "insert into news (id,email,valid) values (null,'$email',0) on duplicate key update email='$email'");

 

Por isso o INSERT INITO (para novos) e ON DUPLICATE KEY UPDATE (para os já existentes)

 

Em relação a PRIMARY e/ou UNIQUE já tentei os dois, mesmo assim duplica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for uma chave composta, todos os campos da chave devem ser exclusivos, se o campo email não for a chave primária, é necessário criar um UNIQUE INDEX para este campo (somente ele), para que o DB entenda que este campo não deve repetir.

 

Dentro do ON DUPLICATE KEY UPDATE, devem ser listados os campos e seus valores atualizados, e não o campo que deve ser feito a verificação, a verificação é feita nas chaves.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for uma chave composta, todos os campos da chave devem ser exclusivos, se o campo email não for a chave primária, é necessário criar um UNIQUE INDEX para este campo (somente ele), para que o DB entenda que este campo não deve repetir.

 

Dentro do ON DUPLICATE KEY UPDATE, devem ser listados os campos e seus valores atualizados, e não o campo que deve ser feito a verificação, a verificação é feita nas chaves.

 

Olá galera!

 

Estava eu usando uma chave composta, separei e coloquei o id p/ PRIMARY e email p/ UNIQUE.

Problema resolvido.

 

Obg!

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.