Ir para conteúdo

Arquivado

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

filipecrosk

[Resolvido] [Procedure] É possível fazer isso?

Recommended Posts

Tenho um sistema para escolas, nele tenho uma classe que verifica se tem modelos de relatórios para 1 aluno, depois faz uma série de ações.

 

É possível fazer isso direto no banco com uma procedure?

 

 

<?php
//################################################################################################################
//VERIFICA SE TEM ALGUM MODELO DISPONIVEL PARA ESSE CICLO E CRIA PARA O ALUNO
//CASO O RELATORIO JA EXISTA ENTAO ATUALIZA AS MATERIAS E COMPETENCIAS
//################################################################################################################

function Cria_Relatorios($aluno,$turma){

$sql = "SELECT modelos.* FROM modelos INNER JOIN ciclos ON ciclos.Cic_id=modelos.Mod_ciclo INNER JOIN turmas ON turmas.Tur_ciclo=ciclos.Cic_id WHERE turmas.Tur_id=". $turma;
$dados = mysql_query($sql); 
if ( mysql_num_rows($dados) > 0 ) {
while($modelo = mysql_fetch_array($dados)){
	//### consulta se já existe algum relatório para esse modelo e aluno
	$sql = "SELECT relatorios.* FROM relatorios WHERE Rel_modelo=". $modelo["Mod_id"] ." AND Rel_aluno=". $aluno;
	$dados2 = mysql_query($sql);
	if ( mysql_num_rows($dados2) == 0 ){
		//Nao tendo nenhum, entao cria um novo
		$x = mysql_query("INSERT INTO relatorios (Rel_modelo,Rel_aluno,Rel_ciclo,Rel_turma,Rel_tipo,Rel_data) VALUES (". $modelo["Mod_id"] .",". $aluno .",". $modelo["Mod_ciclo"] .",". $turma .",". $modelo["Mod_tipo"] .",now());");
		if($x){

			$relatorio_novo = mysql_insert_id();
			//############################### COPIA AS MATERIAS ##########################
			//NÃO CÓPIA AS MÁTERIAS OPCIONAIS
			$sql = "SELECT modelos_materias.* FROM modelos_materias LEFT JOIN materias ON materias.Mat_id=modelos_materias.Mat_materia WHERE modelos_materias.Mat_modelo=". $modelo["Mod_id"] ." AND materias.Mat_opcional='0'";
			$dados3 = mysql_query($sql); 
			if ( mysql_num_rows($dados3) > 0 ) {
				while($materia = mysql_fetch_array($dados3)){
					$y = mysql_query("INSERT INTO relatorios_materias (Mat_relatorio,Mat_modelo,Mat_materia,Mat_professores) VALUES (". $relatorio_novo .",". $materia["Mat_id"] .",". $materia["Mat_materia"] .",'". $materia["Mat_professores"] ."');");
					if($y){

						$materia_novo = mysql_insert_id();
						//############################### COPIA OS DETALHES ###################################
						$sql = "SELECT * FROM modelos_materias_detalhes WHERE Det_materia=". $materia["Mat_id"];
						$dados4 = mysql_query($sql); 
						if ( mysql_num_rows($dados4) > 0 ) {
							while($detalhes = mysql_fetch_array($dados4)){
								$y = mysql_query("INSERT INTO relatorios_materias_detalhes (Det_materia,Det_detalhe,Det_semestre,Det_nome,Det_ordem) VALUES (". $materia_novo .",". $detalhes["Det_id"] .",". $detalhes["Det_semestre"] .",'". $detalhes["Det_nome"] ."',". $detalhes["Det_ordem"] .");");
								if($y){
									//
								} else {
									echo "<div id='atencao'>Erro<br>Houve um erro na geração do relatório. Informe o suporte para analisar. COD: 0101</div>";
								}
							}//while($materia = mysql_fetch_array($dados3)){
						//} else {
						//		echo "<div id='atencao'>Erro<br>Houve um erro na geração do relatório. Informe o suporte para analisar. COD: 0102</div>";
						}//if ( mysql_num_rows($dados4) > 0 ) {	

					} else {
						echo "<div id='atencao'>Erro<br>Houve um erro na geração do relatório. Informe o suporte para analisar. COD: 0103</div>";
					}//if($y){
				}//while($materia = mysql_fetch_array($dados3)){
			}//if ( mysql_num_rows($dados3) > 0 ) {

		} else {
			echo "<div id='atencao'>Erro<br>Houve um erro na geração do relatório. Informe o suporte para analisar. COD: 0104</div>";
		}//if($x){
	} else {
		//CASO JA TENHA RELATORIO, VERIFICA E ATUALIZA AS MATERIAS
		while($relatorios = mysql_fetch_array($dados2)){
			$relatorio_atual = $relatorios["Rel_id"];
			//############################### COPIA AS MATERIAS ##########################
			//NÃO CÓPIA AS MÁTERIAS OPCIONAIS
			$sql = "SELECT modelos_materias.* FROM modelos_materias LEFT JOIN materias ON materias.Mat_id=modelos_materias.Mat_materia WHERE modelos_materias.Mat_modelo=". $modelo["Mod_id"] ." AND materias.Mat_opcional='0'";
			$dados3 = mysql_query($sql); 
			if ( mysql_num_rows($dados3) > 0 ) {
				while($materia = mysql_fetch_array($dados3)){

					//VERIFICA SE A MATERIA JA EXISTE
					$sql = "SELECT * FROM relatorios_materias WHERE Mat_relatorio=". $relatorio_atual ." AND Mat_modelo=". $materia["Mat_id"];
					$dados5 = mysql_query($sql);
					if ( mysql_num_rows($dados5) == 0 ){

						//Caso a materia ainda nao exista entao copia para o relatorio
						$y = mysql_query("INSERT INTO relatorios_materias (Mat_relatorio,Mat_modelo,Mat_materia,Mat_professores) VALUES (". $relatorio_atual .",". $materia["Mat_id"] .",". $materia["Mat_materia"] .",'". $materia["Mat_professores"] ."');");
						if($y){

							$materia_novo = mysql_insert_id();
							//############################### COPIA OS DETALHES ###################################
							$sql = "SELECT * FROM modelos_materias_detalhes WHERE Det_materia=". $materia["Mat_id"];
							$dados4 = mysql_query($sql); 
							if ( mysql_num_rows($dados4) > 0 ) {
								while($detalhes = mysql_fetch_array($dados4)){
									$y = mysql_query("INSERT INTO relatorios_materias_detalhes (Det_materia,Det_detalhe,Det_semestre,Det_nome,Det_ordem) VALUES (". $materia_novo .",". $detalhes["Det_id"] .",". $detalhes["Det_semestre"] .",'". $detalhes["Det_nome"] ."',". $detalhes["Det_ordem"] .");");
									if($y){
									//
									} else {
										echo "<div id='atencao'>Erro<br>Houve um erro na geração do relatório. Informe o suporte para analisar. COD: 0111</div>";
									}
								}//while($materia = mysql_fetch_array($dados3)){
							//} else {
							//	echo "<div id='atencao'>Erro<br>Houve um erro na geração do relatório. Informe o suporte para analisar. COD: 0112</div>";
							}//if ( mysql_num_rows($dados4) > 0 ) {	
							//############################### COPIA OS DETALHES ##################################

						} else {
							echo "<div id='atencao'>Erro<br>Houve um erro na geração do relatório. Informe o suporte para analisar. COD: 0113</div>";
						}//if($y){

					} else {
						//caso a materia ja exista entao atualiza as competencias
						while($materia_atual = mysql_fetch_array($dados5)){

							$sql = "SELECT * FROM modelos_materias_detalhes WHERE Det_materia=". $materia["Mat_id"];
							$dados4 = mysql_query($sql); 
							if ( mysql_num_rows($dados4) > 0 ) {
								while($detalhes = mysql_fetch_array($dados4)){

									//verifica se a competencia ja existe
									$sql = "SELECT * FROM relatorios_materias_detalhes WHERE Det_materia=". $materia_atual["Mat_id"] ." AND Det_detalhe=". $detalhes["Det_id"];
									$dados6 = mysql_query($sql); 
									if ( mysql_num_rows($dados6) == 0 ){

										//############################### COPIA OS DETALHES ###################################
										$y = mysql_query("INSERT INTO relatorios_materias_detalhes (Det_materia,Det_detalhe,Det_semestre,Det_nome,Det_ordem) VALUES (". $materia_atual["Mat_id"] .",". $detalhes["Det_id"] .",". $detalhes["Det_semestre"] .",'". $detalhes["Det_nome"] ."',". $detalhes["Det_ordem"] .");");
										if($y){
										//
										} else {
											echo "<div id='atencao'>Erro<br>Houve um erro na geração do relatório. Informe o suporte para analisar. COD: 0121</div>";
										}
										//############################### COPIA OS DETALHES ##################################

									} //if ( mysql_num_rows($dados6) > 0 ) {	

								}//while($materia = mysql_fetch_array($dados3)){
							//} else {
							//	echo ---
							}//if ( mysql_num_rows($dados4) > 0 ) {															

						}//while($materia_atual = mysql_fetch_array($dados5)){

					}//if ( mysql_num_rows($dados5) == 0 ){

				}//while($materia = mysql_fetch_array($dados3)){
			}//if ( mysql_num_rows($dados3) > 0 ) {

		}//while($relatorios = mysql_fetch_array($dados2)){

	}//if ( mysql_num_rows($dados2) == 0 ){
}//while($modelo = mysql_fetch_array($dados)){	
} else {
echo "<div id='atencao'>Erro<br>Houve um erro na geração do relatório. Informe o suporte para analisar. COD: 0115</div>";
}//if ( mysql_num_rows($dados) > 0 ) {



}//function Cria_Relatorios(aluno,turma){
//################################################################################################################
//################################################################################################################
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá filipecrosk!

 

É possivel programar esse procedimento no banco de dados.

 

Pra ficar mais fácil te ajudar, seria melhor você postar a estrutura das tabelas que você vai usar e descrever bem o que você quer fazer no procedimento.

 

Quando eu programo uma procedure eu faço um clone do BD, vou executando o procedimento e testando, pois fazer testes no BD 'oficial' é arriscado.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bezerk,

 

valeu aí cara.. vou te passar a estrutura aqui para me ajudar então..

abraços

 

Primeiro vamos explicar o que eu faço:

1. Isso é para um sistema de escola, e essa escola trabalha com modelo de relatórios, para isso eu criei a estrutura onde o administrador cria um modelo e esse modelo pode ser replicado/copiado para todos os alunos, mas para não consumir mais do que deveria eu crio/altero esses modelos apenas quando solicitado por um professor/administrador

 

2. Então quando o professor entra no aluno o sistema verifica se já tem algum relatório criado para ele, caso não tenha então cria esse relatório, e copia todas as configurações dele, ou se já tiver confere se o relatório tem a mesma estrutura do modelo.

 

3. Cada relatório tem N matérias, e cada matéria tem N itens. Confira nessa imagem: procedure.png

 

4. Com base nesse esquema dá para ver que é "simples", ele verifica a tabela de modelo e faz uma "cópia" das informações na tabela de relatórios, e o mesmo nas tabelas abaixo.

 

5. Confira a estrutura das tabelas, depois revise no tópico de abertura toda a programação feita no PHP.

CREATE TABLE `modelos` (
 `Mod_id` int(11) NOT NULL auto_increment,
 `Mod_ciclo` int(11) default NULL,
 `Mod_tipo` enum('1','2','3') default NULL,
 `Mod_descricao` varchar(200) default NULL,
 `Mod_atitudinal` varchar(600) default NULL,
 `Mod_avaliacao` longtext,
 `Mod_data` date default NULL,
 UNIQUE KEY `id` (`Mod_id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;

CREATE TABLE `modelos_materias` (
 `Mat_id` int(11) NOT NULL auto_increment,
 `Mat_modelo` int(11) default NULL,
 `Mat_materia` int(11) default NULL,
 `Mat_professores` varchar(60) default NULL,
 `Mat_avaliacao` longtext,
 `Mat_data` date default NULL,
 UNIQUE KEY `id` (`Mat_id`)
) ENGINE=InnoDB AUTO_INCREMENT=105 DEFAULT CHARSET=utf8;

CREATE TABLE `modelos_materias_detalhes` (
 `Det_id` int(11) NOT NULL auto_increment,
 `Det_materia` int(11) default NULL,
 `Det_detalhe` int(11) default NULL,
 `Det_semestre` enum('1','2','3','4','5','6') default NULL,
 `Det_nome` varchar(600) default NULL,
 `Det_ordem` int(11) default NULL,
 `Det_data` date default NULL,
 UNIQUE KEY `id` (`Det_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4851 DEFAULT CHARSET=utf8;

CREATE TABLE `relatorios` (
 `Rel_id` int(11) NOT NULL auto_increment,
 `Rel_modelo` int(11) default NULL,
 `Rel_aluno` int(11) default NULL,
 `Rel_ciclo` int(11) default NULL,
 `Rel_turma` int(11) default NULL,
 `Rel_tipo` enum('1','2','3') default NULL,
 `Rel_data` date default NULL,
 `Rel_status` enum('0','1') default '0',
 `Rel_revisado` enum('0','1') default '0',
 UNIQUE KEY `id` (`Rel_id`)
) ENGINE=InnoDB AUTO_INCREMENT=155 DEFAULT CHARSET=utf8;


CREATE TABLE `relatorios_materias` (
 `Mat_id` int(11) NOT NULL auto_increment,
 `Mat_relatorio` int(11) default NULL,
 `Mat_modelo` int(11) default NULL,
 `Mat_materia` int(11) default NULL,
 `Mat_professores` varchar(60) default NULL,
 `Mat_revisado` enum('0','1') default '0',
 `Mat_aulas_dadas` int(11) default '0',
 `Mat_aulas_assistidas` int(11) default '0',
 UNIQUE KEY `id` (`Mat_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1328 DEFAULT CHARSET=utf8;

CREATE TABLE `relatorios_materias_detalhes` (
 `Det_id` int(11) NOT NULL auto_increment,
 `Det_materia` int(11) default NULL,
 `Det_detalhe` int(11) default NULL,
 `Det_semestre` enum('1','2','3','4','5','6') default NULL,
 `Det_nome` varchar(600) default NULL,
 `Det_ordem` int(11) default NULL,
 `Det_professor` enum('A','NO','-') default NULL,
 `Det_aluno` enum('A','') default NULL,
 `Det_data` date default NULL,
 `Det_status` enum('0','1') default '1',
 UNIQUE KEY `id` (`Det_id`)
) ENGINE=InnoDB AUTO_INCREMENT=67882 DEFAULT CHARSET=utf8;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido!!!

 

Se possível, poste a resolução do seu problema. Pode ser útil a outros com as mesmas dúvidas. :joia:

 

Abçs

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.