Tenho um sistema de newsletter e uso o framework codeigniter, tenho uma base com 22 mil emails cadastrados e uso o cron do linux para rodar o script todo dia as 19h.
No meu script de envio uso a biblioteca Swift Mailer para enviar as mensagens, tive alguns problemas com envios duplicados(triplicados, etc) para o mesmo assinante, então implementei uma tabela 'envio' e a cada envio grava o id do assinante e da newsletter que ele recebeu, o problema é que ainda ocorrem duplicações.
Segue parte do script do controller de envio onde verifico se já foi enviada a mensagem:
for ($i = 1; $i <= $totalAssinantes; $i++){
...
// se não foi enviado então envia
if(!$this->envio_model->foiEnviado($subscribers[&i]['id'], $idNewsletter)){
$message->setTo($subscribers[&i]['email']);
$mailer->send($message);
$this->envio_model->adicionaEnvio($subscribers[$i]['id'], $idNewsletter);
}
...
}
E os dois métodos do meu model que adiciona o envio e verifica se já foi enviado:
public function adicionaEnvio($idAssinante, $idNewsletter){
$data = array(
'id' => null,
'idNewsletter' => $idNewsletter,
'idAssinante' => $idAssinante
);
$str_insert = $this->db->insert_string('envio', $data);
$this->db->query($str_insert);
return $this->db->affected_rows();
}
public function foiEnviado($idAssinante, $idNewsletter){
$query = $this->db->query('
SELECT
*
FROM
envio
WHERE
idNewsletter = ? and idAssinante = ?
',array($idNewsletter,$idAssinante));
if ($query->num_rows() > 0) {
return TRUE;
} else {
return FALSE;
}
}
Na tabela 'envio' alguns assinantes aparecem 20 vezes. O php aguarda a consulta de banco de dados retornar ou ele pode executar novas consultas antes da primeira terminar? existe forma de sincronizar isso?
Obs: com uma base menor de emails, ~1,5 mil emails não ocorreu duplicação.
Pergunta
moiado.anderson
Tenho um sistema de newsletter e uso o framework codeigniter, tenho uma base com 22 mil emails cadastrados e uso o cron do linux para rodar o script todo dia as 19h.
No meu script de envio uso a biblioteca Swift Mailer para enviar as mensagens, tive alguns problemas com envios duplicados(triplicados, etc) para o mesmo assinante, então implementei uma tabela 'envio' e a cada envio grava o id do assinante e da newsletter que ele recebeu, o problema é que ainda ocorrem duplicações.
Segue parte do script do controller de envio onde verifico se já foi enviada a mensagem:
E os dois métodos do meu model que adiciona o envio e verifica se já foi enviado:
Na tabela 'envio' alguns assinantes aparecem 20 vezes. O php aguarda a consulta de banco de dados retornar ou ele pode executar novas consultas antes da primeira terminar? existe forma de sincronizar isso?
Obs: com uma base menor de emails, ~1,5 mil emails não ocorreu duplicação.
Editado por moiado.andersonLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.