Olá,
Vamos lá…
(Acho que esse tópico promete…é polêmico).
Já tentei e pesquisei muito o assunto e quase cheguei a uma conclusão.
Quero criar um contador que conte até 60 segundos e quando chegar aos 60 o código adiciona +3 ao campo “turno” no banco de dados.
Estou utilizando duas tecnologias para tentar esse “feito”: PHP/MySQL.
Já fiz um sistema de turnos legal em Javascript, mas ele é client-side e então não ajuda muito e nem resolve o problema.
Em PHP dizem que não tem jeito. (Ainda penso que tenha jeito sim).
Então tem o MySQL. Fazer algum código automático que adicione valores de turnos na tabela de tempos em tempos.
Pensei em triggers e eventos que não entendo muito. E é o que tentarei agora.
Alguma sugestão geral ou sobre funções do MySQL para criar um sistema de turnos?
Minha idéia é a seguinte.
A partir do momento que o usuário clicar em um botão do formulário(botão ‘Fundar Nova Cidade’), o sistema dispara um contador que adiciona turnos em um campo da tabela no banco de dados após o contador chegar a determinado valor.
E enquanto a cidade “existir”, o sistema deve continuar a gerar e adicionar turnos de tempo em tempo no banco de dados.
Alguma idéia ou sugestão?
Muito obrigado por qualquer informação ou ajuda. É bem vinda.
Obrigado.
Jeito tem, a questão é vc “dividir” o processo entre o client/server, já que o seu impeditivo seria o tempo máximo de uma requisição (geralmente 60 segundos), vc pode criar uma funcão em js que aciona o clique do botão e outra que após ser clicado ficará pedindo aumento do contador a cada 60 segundos usando setTimeout por exemplo…
var acionado = false;
function acionaContador() {
if (!acionado) {
acionado = true;
setTimeout("aumentaContador()", 1000 * 60); //1 segundo X 60 = 1 minuto
}
}
function aumentaContador() {
//ajax...
}
Tendo essa base, você cria uma página php que será buscada pelo ajax, informando que precisa aumentar o contador, e o melhor, nem precisa de trigger para isso… boa sorte!
1 curtida
Obrigado pela ajuda @rodevops.
Eu consegui fazer uma função(Stored Procedure) dentro do MySQL no PHPMYADMIN que dispara um contador que adiciona +3 turnos a cada 10 segundos em um campo chamado “turnos” no banco de dados.
Está funcionando. Só não posso parar o servidor do MySQL senão tenho que fazer um CALL para chamar a função do contador novamente manualmente.
A questão é fazer a Stored Procedure e o CALL da função ser chamado no PHP. Eu implementei um código básico mas ainda não está atualizando o banco de dados. Mas no MySQL esta funcionando. Preciso saber como implementar esse código…
Código até agora:
https://pastebin.com/nxndcRKX
Obrigado por qualquer ajuda.
=== EDIT ===
Estou finalizando meu tópico aqui. Consegui fazer funcionar utilizando PHP/MySQL e somente o MySQL, porém como é um LOOP infinito pra ficar atualizando o banco de dados, trava o servidor do MySQL nessa tarefa apenas e não aceita mais requisições novas, pois não para de rodar. Mas funciona.
Utilizei triggers e stored procedures.
Código usando PHP/MySQL:
https://pastebin.com/gPptE9nF
Código usando MySQL:
https://pastebin.com/k9U9GnEq
Fica a título de estudos pra quem precisar.
Obrigado.
Bom é um recurso, mas sinceramente você está usando um excesso e tanto de processamento para uma coisa tão simples, já que você quer apenas usar MySQL, pesquise sobre event scheduler
https://dev.mysql.com/doc/refman/8.0/en/events-overview.html
Bascicamente é um tarefa agendada, melhor que usar proc (abreviação de procedure), func (functions) e principalmente trigger’s, como o pessoal falou em outros tópicos, trigger é interessante mas pra travar tudo é uma beleza! (principalmente em tabelas não indexadas)… e vc mesmo já está vendo o resultado (travando tudo) mas enfim, vale para seu aprendizado…
1 curtida