liviasam 1 Report post Posted March 29, 2014 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 Share this post Link to post Share on other sites
Motta 645 Report post Posted March 29, 2014 <?=@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 .... Share this post Link to post Share on other sites
liviasam 1 Report post Posted March 29, 2014 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 Share this post Link to post Share on other sites
-=Érico=- 5 Report post Posted March 29, 2014 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 Share this post Link to post Share on other sites
liviasam 1 Report post Posted March 29, 2014 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. Share this post Link to post Share on other sites
-=Érico=- 5 Report post Posted March 29, 2014 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_format2. NUNCA use funções mysql_*, sempre use as Classes MySQLi ou PDO_MYSQL. Share this post Link to post Share on other sites
liviasam 1 Report post Posted March 29, 2014 Irei criar um tópico lá, não adiantou o seu jeito, permaneceu igual como antes, trazendo somente um aluno. Share this post Link to post Share on other sites
liviasam 1 Report post Posted March 29, 2014 http://forum.imasters.com.br/topic/518802-calculo-de-media/ Share this post Link to post Share on other sites