Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

LeonardoDesigner

Verificação de faltas

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então.. utiliza oke eu passei.. busca as faltas dele.. e verifica pelas datas se elas são de semanas seguidas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

 

http://prntscr.com/84n5i3

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;
			
		}
		
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.