Ir para conteúdo

Arquivado

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

liviasam

Valor decimal

Recommended Posts

Tá, só tinha esquecido de postar o que traz o valor do banco.

 

<?=@mysql_result(mysql_query("SELECT n1 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n1)?>

 

No caso o da média não traz valor de banco, por isso não sei o que pode ser

 

Tentei passar só o ID do aluno, mas só volta o resultado de um

 

Não entendi Motta, o que vc me passou é o que eu já tenho no original como tinha postado lá atrás, e funciona perfeitamente, o problema é justamente a média.

 

Quando não trato a média lista todos normais, mas quando faço o tratamento da média é que só lista 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?=@mysql_result(mysql_query("SELECT n1 FROM notas WHERE id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n1)?>

 

 

 

Editar em tablet ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas continuo sem entender. Meu problema não está em trazer os dados do banco e sim na média.

 

O que vc está me postando é para trazer os valores do banco, e isso ele faz perfeitamente. Somente quando tento fazer a média é que da o problema e ele só lista 1 nome, se eu tirar o cálculo da média ele fica normal e lista todos

 

E eu também não posso implementar isso na média, pois ainda tem o n2, n3, n4. O problema é implementar algo que faça a média que não interfira nos selects que trazem os dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o Motta falou, é só tirar o aluno da condição pra retornar todos os alunos.

Se você quiser retornar todas as notas e a média no comando SQL usa o comando abaixo.

SELECT aluno_id, nota, 1 seq
FROM notas

UNION ALL

SELECT aluno_id, avg(nota) nota, 2 seq
FROM notas
GROUP BY aluno_id

ORDER BY aluno_id, seq

Olha o resultado aqui: http://www.sqlfiddle.com/#!2/65fb86/4/0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas eu já tirei e permaneceu o erro. Acho que ainda não entenderam. Vamos lá.

 

Tenho as funções abaixo que trazem os valores do banco das notas dadas:

 

<td align="center">
<?=@mysql_result(mysql_query("SELECT n1 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n1)?> 
</td>
<td align="center">
<?=@mysql_result(mysql_query("SELECT n2 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n2)?> 
</td>
<td align="center">
<?=@mysql_result(mysql_query("SELECT n3 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n3)?> 
</td>
<td align="center">
<?=@mysql_result(mysql_query("SELECT n4 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]"),0,n4)?> 
</td>
Até aí está tranquilo, e lista todos os alunos. Mas agora criei um campo e criei uma função para fazer a média dessas 4 notas que estão no banco. A função abaixo:
<?php
$sql = "SELECT * FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]";
$media = mysql_query($sql);
while($linha=mysql_fetch_array($media))
{
$media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4.00;
echo $media;
}
?>
Quando eu coloco essa função ele faz o cálculo e insere a média no campo criado, mas ele passa a listar somente um aluno.
Já retirei a condição do aluno como falado, porém continua a listar somente 1 aluno.
O problema está nessa função, já tentei as seguintes formas como abaixo:
<?php
$sql = "SELECT * FROM notas";
$media = mysql_query($sql);
while($linha=mysql_fetch_array($media))
{
$media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4.00;
echo $media;
}
?>
Ou:
<?php
$sql = "SELECT * FROM notas WHERE id_aluno=$coluna[id_aluno] ";
$media = mysql_query($sql);
while($linha=mysql_fetch_array($media))
{
$media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4.00;
echo $media;
}
?>
Ou ainda:
<?php
$sql = "SELECT * FROM notas WHERE id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]";
$media = mysql_query($sql);
while($linha=mysql_fetch_array($media))
{
$media = ($linha["n1"] + $linha["n2"] + $linha["n3"] + $linha["n4"])/4;
echo $media;
}
?>
Então o problema está unicamente na função que cria a média. Ou se tem outro método de se criar a média ou tenho de achar uma solução para esse problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, ficou mais claro, você devia postar a estrutura exata da sua tabela no tópico, achei que havia uma nota por registro, e não 4 colunas com cada nota.

Isso já é um problema com a lógica de programação, não é mais MySQL.

<?php
$sql = "SELECT n1, n2, n3, n4 FROM notas WHERE id_aluno=$coluna[id_aluno] AND id_periodo=$col_periodo[id_periodo] AND id_serie=$_SESSION[id_serie] AND id_materia=$_SESSION[id_materia]";
$res = mysql_query($sql);
$rs  = mysql_fetch_row($res);
?>

<td align="center"><?= $rs[0] ?></td><!-- Nota 1 -->
<td align="center"><?= $rs[1] ?></td><!-- Nota 2 -->
<td align="center"><?= $rs[2] ?></td><!-- Nota 3 -->
<td align="center"><?= $rs[3] ?></td><!-- Nota 4 -->
<td align="center"><?= ($rs[0] + $rs[1] + $rs[2] + $rs[3]) / 4 ?></td><!-- Media -->

Eu não quero extender muito no PHP, se tiver mais dúvidas posta no fórum de PHP e só coloca um link aqui.

1. Ajuste o formato da média com number_format
2. NUNCA use funções mysql_*, sempre use as Classes MySQLi ou PDO_MYSQL.

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.