Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, estou com um problema e não estou conseguindo pensar em uma solução.
Tenho um sistema de alunos de uma escola de musica, e eu preciso fazer um sistema automatizado que
quando o aluno falte 3 dias (sendo 1 aula por semana) seguidos, o sistema automaticamente apague o aluno
ou o cadastre numa tabela separada para que o operador apague manualmente.
Tenho uma tabela cadastradas com os alunos, e uma outra tabela cadastrada as chamadas, que tenho nesta
o ID do aluno, a data da chamada, e o Status que é se faltou ou se estava presente...
E não faço ideia de como faço para identificar das 3 ultimas faltas de cada aluno se elas são seguidas, pois toda semana cada
aluno tem 1 aula, e preciso saber se o aluno faltou 3 semanas seguidas, isso numa função automática vendo por cada um dos alunos...
Alguém pode me ajudar?
Tipo.. vc pode utilizar o DATE do PHP para verificar qual a semana da falta.. tem uma função dele que lhe traz o número da semana...
$data= date("W", strtotime('2015-07-07'));
echo "Semana: ".$data."<br>";
// Semana: 28
$data= date("W", strtotime('2015-08-08'));
echo "Semana: ".$data."<br>";
// Semana: 32
$data= date("W", strtotime('2015-08-10'));
echo "Semana: ".$data."<br>";
// Semana: 33
Ai é soh vc verifica se pulou alguma semana
Se isto está no BD basta fazer um consulta por aluno, use o ORDER BY DESC para pegar os 3 últimos lançamentos de cada aluno, se todos forem "falta" faz a ação, acredito que seja o modo mais simples.
Se isto está no BD basta fazer um consulta por aluno, use o ORDER BY DESC para pegar os 3 últimos lançamentos de cada aluno, se todos forem "falta" faz a ação, acredito que seja o modo mais simples.
Seria esse o modo mais fácil mesmo, mas o aluno pode ter faltado 2 semanas sim e 1 não, e a outra ele faltar de novo, ai ficaria 3, mas preciso de 3 faltas seguidas para realizar a ação. :mellow:
Então.. utiliza oke eu passei.. busca as faltas dele.. e verifica pelas datas se elas são de semanas seguidas...
>
Seria esse o modo mais fácil mesmo, mas o aluno pode ter faltado 2 semanas sim e 1 não, e a outra ele faltar de novo, ai ficaria 3, mas preciso de 3 faltas seguidas para realizar a ação. :mellow:
Vamos tentar pensar um pouco:
Ciclano:
Semana 1 - Falta:
Semana 2 - Presente
Semana 3 - Falta
Semana 4 - Falta
ORDER BY DESC: Falta (semana 4) - Falta (semana 3) - Presente (semana 2)
Resultado não faz nada.
Beltrano:
Semana 1 - Presente:
Semana 2 - Falta
Semana 3 - Falta
Semana 4 - Falta
ORDER BY DESC: Falta (semana 4) - Falta (semana 3) - Falta (semana 2)
Resultado executa a ação.
Basta pensar, se você ordenar de forma decrescente e limitar o resultado as 3 últimas, nunca vai ocorrer o que você falou.
Então.. utiliza oke eu passei.. busca as faltas dele.. e verifica pelas datas se elas são de semanas seguidas...
Oi o seu é o que estou chegando mais próximo já estou com os numeros da semana das 3 ultimas faltas de cada aluno, agora preciso saber uma função para saber se esses 3 numeros são consecutivos ou não? como faço?
Só falta a parte ali / VERIFICANDO SE SÃO DIAS SEGUIDOS / , ai depois de saber se é seguido, é só fazer um if e cadastrar o aluno na lista dos que tem 3 faltas e depois o operador fazer a exclusão do aluno, mas como saber se as 3 semanas são consecutivas?
if(isset($_GET['sistem']) && $_GET['sistem'] == 'ativo'){
$readUsers = read('alunos');
if($readUsers){
foreach($readUsers as $user):
$readChamadas = read('chamada',"WHERE cha_aluno = '$user[aluno_id]' AND cha_status = 'f' ORDER BY cha_data DESC LIMIT 3");
$contChamadas = count($readChamadas);
if($contChamadas >= 3){
foreach($readChamadas as $cha){
if($cha['cha_status'] == 'f'){
/* TRANSFORMANDO FORMATO DA DATA */
$data = $cha['cha_date'];
$newData = explode('/',$data);
$newData = $newData[2].'-'.$newData[1].'-'.$newData[0];
$verificaSemana = date("W", strtotime($newData));
/* VERIFICANDO SE SÃO DIAS SEGUIDOS */
/* VERIFICANDO SE SÃO DIAS SEGUIDOS */
echo $cha['cha_aluno'].' - '.$cha['cha_status'].' - '.$newData.' - '.$verificaSemana.' - <br />';
}
}
}
endforeach;
}
}E então gente? Continuo com o problema, não consegui resolver, estou com as 3 semanas das 3 ultimas faltas http://prntscr.com/84n5i3 de cada aluno, mas e como faço pra ver se as 3 são consecutivas? me ajudem
O Motta ta passou o link com as funcoes de data você leu? la tem a funcao WEEKOFYEAR()
isso vai te retornar os alunos que faltaram nas ultimas 3 semanas (sem contar a semana atual)
set @semana = WEEKOFYEAR(CURDATE());
SELECT * from alunos
WHERE STATUS = 'f' AND
WEEKOFYEAR(data) in (@semana-1, @semana-2, @semana-3)
ai tu monta um delete com esse select dentro
http://www.w3resource.com/sql/delete-statement/delete-with-subqueries.php
Amigo você tem que demostrar interesse, ninguém aqui vai te dar o código pronto, se você ler o material que a galera te passou e dar uma lida no manual do PHP você vai conseguir.
Sua insistência em mais ajuda só nós leva a crer que você não vai estudar e só quer resolver seu problema...
Publique o modelo ou descrição das tabelas, ajuda.
Em geral os BDs tem functions que retornam a semana de uma data , pesquise por Funções (funtions) de data no BD, creio ser Mysql
http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_week