Ir para conteúdo

Arquivado

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

gildo.rj

Select.

Recommended Posts

Bom dia pessoal.

 

Estou com uma dificuldade, estou montando um histórico escolar e bateu no seguinte problema:

 

monto a query:

 

$histor = mysql_query("SELECT CodDiscN,Serie,(Nota1+Nota2+Nota3)/3 AS notas FROM notas WHERE filial='$filial' AND MatriculaN='$matricula' GROUP BY CodDiscN,Serie");

 

nessa query eu obtenho todos os dados necessários para montar o histórico do aluno, o problema é o seguinte, preciso montar da seguinte forma.

 

Matéria 2013 2014 2015

1 Ano 2 Ano 3 Ano

 

Matematica 7 8 6

 

O problema é o seguinte, nessa forma na query quando tem matérias duplicadas ele me da os valores em linhas diferente, como poderia alinhar esses valores da forma que apresento acima?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai precisar trabalhar com matrizes vc precisa colocar tudo no select faça um group by tb ai ele vai agrupar ano materia. monta um select com todos os campos da sua tbl

 

seria isso

 

$suaVariavel[$x][$y][$nomeDoCampo] onde $x seria suas linhas e $y suas colunas.

Para exibir isso você teria que fazer um for composto como exemplo abaixo

<table>
<?php
for($x=1;$x<=NumeroMaterias;$x++){
         echo '<tr>';
         for($y=1;$y<=NumeroAnos;$y++){
            echo '<td>';
            echo $suaVariavel[$x][$y][$nomeDoCampo] ;
            echo '</td>';
         }
         echo '</tr>';
}
?>
</table>

ve se da certo esse é o caminho

 

abç

Compartilhar este post


Link para o post
Compartilhar em outros sites
Bom dia Zezinho, não funfo ou to fazendo algo errado, não saco muito de matrizes pode dar uma olhada por favor, o codigo que fiz segue abaixo:


$histor = mysql_query("SELECT CodDiscN,Serie,(Nota1+Nota2+Nota3)/3 AS notas FROM notas WHERE filial='$filial' AND MatriculaN='$matricula' GROUP BY CodDiscN,Serie");

for($i=0;$i<mysql_num_rows($histor);$i++) {

$tudo[] = mysql_fetch_assoc($histor);

}

$nMat= mysql_num_rows($histor);


echo '<tr><table>';


for($x=1;$x<=$nMat;$x++){

echo '<tr>';

for($y=1;$y<=9;$y++){

echo '<td>';

echo $tudo[$x][$y]['notas'] ;

echo '</td>';

}

echo '</tr>';

}

echo '</table></tr>';

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara me manda o create da sua tbl alguns registros que vc tem ai monto aqui e vejo se consigo isso para vc pois acho que tem algo errado com o seu select.

Me passa por msg do forum

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara me manda o create da sua tbl alguns registros que você tem ai monto aqui e vejo se consigo isso para você pois acho que tem algo errado com o seu select.

Me passa por msg do forum

Blz amigo, te agradeço, vou encaminhar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja aiiiii

acho que é isso

não esquece que estamos vendo apenas um aluno

<?php
$db = mysqli_connect('localhost', 'root' , '','teste');
//1ª aqui deverá ser a tbl de notas
$sql = "SELECT * FROM notas where MatriculaN = '1210132200001' GROUP BY ano";				
$rs = mysqli_query($db, $sql) or die ("Não foi possivelvel executar a consulta");
$i=1;
while($row = mysqli_fetch_array($rs)){
	$ano[$i] = $row['Ano'];
	//echo $ano[$i];
	$i++;
}
//2º aqui deverá ser apenas as disciplina você pode fazer de duas formas
//			uma buscando as disc apenas que o aluno tem
//			a outra todas as disciplinas que a instituição possui
//			basta alterar a tbl
$sqlA = "SELECT * FROM notas where MatriculaN = '1210132200001' GROUP BY Disciplina";				
$rsA = mysqli_query($db, $sqlA) or die ("Não foi possivelvel executar a consulta");
$j=1;
while($rowA = mysqli_fetch_array($rsA)){
	$materia[$j] = $rowA['Disciplina'];	
	//echo $materia[$j];
	$j++;
}

//3º busca todos os registros de um determinado aluno
$sqlB = "SELECT * FROM notas where MatriculaN = '1210132200001'";				
$rsB = mysqli_query($db, $sqlB) or die ("Não foi possivelvel executar a consulta");
$t=1;
while($rowB = mysqli_fetch_array($rsB)){
/*
id, id_aluno, N, CodDiscN,  Disciplina, Categoria,  MatriculaN, Aluno, Serie, Turma, Nota1, Falta1,
ad1,Nota2, Falta2, ad2,  Nota3, Falta3, ad3, Nota4, Falta4, PR, Ano, depe, divisor, filial
*/
	$idAluno[$t] = $rowB['id_aluno'];
	$materiaA[$t] = $rowB['Disciplina'];
	$anoA[$t] = $rowB['Ano'];
	$nota1A[$t] = $rowB['Nota1'];
	$t++;
}





//Vamos montar o Historico

?>
<table width="500" border="1" cellspacing="0" cellpadding="0">
<?php
//Primeiro montei a primeira linha que é referete ao ano essa não é replicada para baixo, porem não ocupamos a primeira coluna
?>
<tr>
<td width="300" > </td>
<?php 
for($x=1;$x<=count($ano);$x++){
?>
<td width="300" ><?php
echo $ano[$x];
?></td>
<?php 
}
?>
</tr>
<?php 
// aqui iremos replicar as linhas para baixo conforme o numero de materias colocando na primeira coluna a partir da 2º linha
// neste espaço exibimos a materia conforme abaixo

for($w=1;$w<=count($materia);$w++){
?>
<tr>
<td width="300" ><?php
echo $materia[$w];
?></td>
<?php 
//agora iremos completar com o numero de colunas que existe em anos igual a primeira linha da tabela criada aqui no HTML
//porem não mostramos o ano apenas deizxamos o espaço
for($y=1;$y<=count($ano);$y++){
?>
<td width="300" >
<?php 
//aqui iremos pegar os dados completos dos alunos e iremos verificar que a materia e ano correnponde com materia e ano do aluno
//se corresponder iremos informar os dados do aluno 
for($u=1;$u<=count($idAluno);$u++){
	
	
	if(($materiaA[$u] == $materia[$w])&&($anoA[$u] == $ano[$y])){
		echo 'Mat: '.$materiaA[$u].' - '.$materia[$w];
		echo '<br>Ano: '.$anoA[$u].' - '.$ano[$y];
		echo '<br>Nota: '.$nota1A[$u];
		break;
	}
	
}
?>
</td>
<?php 
}
?>
</tr>
<?php 
}
?>
</table>

caso tenha a necessidade de fazer a media esse é o script acrescenta apenas a coluna de media la no terceiro select e acrescenta dentro do while a coluna

SELECT *, ((Nota1+Nota2+Nota3+Nota4)/divisor) as mediaMateria
FROM notas

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funfo veio, ele ta me mostrando só as matérias, não aparecem as notas nem o ano que se refere. E tambem está pegando todas as matérias independente do ano que se referem, ele juntou as materias de anos difentes.

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.