maum 0 Denunciar post Postado Junho 2, 2015 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
Motta 645 Denunciar post Postado Junho 3, 2015 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 29 Denunciar post Postado Junho 3, 2015 tendo chave primaria nos campos que nao deve repetir (acredito q no seu caso seja o email) vc deveria usar a instrucao replace into table em vez de insert into table https://dev.mysql.com/doc/refman/5.0/en/replace.html Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Junho 3, 2015 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
maum 0 Denunciar post Postado Junho 3, 2015 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
lokaodomau 61 Denunciar post Postado Junho 3, 2015 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
maum 0 Denunciar post Postado Junho 3, 2015 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