Lógica de Id Sequencial por dia, mês e hora
21/03/2023
0
Boa tarde pessoal! Preciso de ajuda para desenvolver uma lógica.
Quero disparar 1 mil e-mails/dia (100 por hora - das 8hr as 18hrs) e vou usar um select limit 100 para buscar os registros no meu banco de dados.
Acontece que eu não posso repetir os registros e não vou saber quais e-mails já foram enviados. Então, eu preciso pegar os 100 primeiros registros as 8hrs, depois do 101 ao 200 as 09hrs...e assim por diante
Eu poderia estabelecer isso, por ex, por dia, sendo dia 21 todos os registros que começarem com 21, dia 22 todos os registros que começarem com 22, e assim por diante.
O problema é que quando começar outro mês, vai repetir os registros, e eu gostaria de deixar automático até terminarem todos os registros da tabela.
Alguém tem uma ideia de como eu poderia fazer isso, sem gravar os envios?
Por favor!
Obrigado
Quero disparar 1 mil e-mails/dia (100 por hora - das 8hr as 18hrs) e vou usar um select limit 100 para buscar os registros no meu banco de dados.
Acontece que eu não posso repetir os registros e não vou saber quais e-mails já foram enviados. Então, eu preciso pegar os 100 primeiros registros as 8hrs, depois do 101 ao 200 as 09hrs...e assim por diante
Eu poderia estabelecer isso, por ex, por dia, sendo dia 21 todos os registros que começarem com 21, dia 22 todos os registros que começarem com 22, e assim por diante.
O problema é que quando começar outro mês, vai repetir os registros, e eu gostaria de deixar automático até terminarem todos os registros da tabela.
Alguém tem uma ideia de como eu poderia fazer isso, sem gravar os envios?
Por favor!
Obrigado
Nelson
Curtir tópico
+ 0
Responder
Posts
23/03/2023
Arthur Heinrich
Se você não vai gravar dados, como você saberá qual faixa deve ser enviada?
A relação de destinatários/mensagens está armazenada de que forma? Em banco de dados, arquivo txt?
Você pode gerar o range de linhas (inicial, final) a partir do horário.
Extraia a hora H e seu intervalo, a partir das 08:00hs será: ( (H-8)*100+1, (H-8)*100+100 ).
Mas isso só funciona se voce tiver, no máximo (24-8)*100 ou 1600 mensagens por dia.
Do contrário, precisa armazenar qual a última mensagem enviada no último envio. Inicialmente inicialize esta variável com 0 e o seu próximo intervalo será ( ANTERIOR+1, ANTERIOR+100 ).
Quando terminar o envio, atualize o valor da última mensagem enviada para ANTERIOR+100.
Sempre que um procedimento é executado em etapas, como no seu caso, é necessário passar informações de uma execução para a próxima, para que o processo se inicie de onde parou.
Uma alternativa seria preparar o envio de todas as mensagens de uma só vez. Porém, a cada 100 mensagens você interrompe o processamento com um sleep, para acordar no momento em que serão geradas novas mensagens.
A relação de destinatários/mensagens está armazenada de que forma? Em banco de dados, arquivo txt?
Você pode gerar o range de linhas (inicial, final) a partir do horário.
Extraia a hora H e seu intervalo, a partir das 08:00hs será: ( (H-8)*100+1, (H-8)*100+100 ).
Mas isso só funciona se voce tiver, no máximo (24-8)*100 ou 1600 mensagens por dia.
Do contrário, precisa armazenar qual a última mensagem enviada no último envio. Inicialmente inicialize esta variável com 0 e o seu próximo intervalo será ( ANTERIOR+1, ANTERIOR+100 ).
Quando terminar o envio, atualize o valor da última mensagem enviada para ANTERIOR+100.
Sempre que um procedimento é executado em etapas, como no seu caso, é necessário passar informações de uma execução para a próxima, para que o processo se inicie de onde parou.
Uma alternativa seria preparar o envio de todas as mensagens de uma só vez. Porém, a cada 100 mensagens você interrompe o processamento com um sleep, para acordar no momento em que serão geradas novas mensagens.
Responder
Clique aqui para fazer login e interagir na Comunidade :)