У меня есть код, который проходит через базу данных и выводит все на страницу php.
$avg = mysql_query("SELECT subject, gradeone, gradetwo, gradethree, ((gradeone + gradetwo + gradethree) / 3) as average FROM grades"); $q = mysql_query("SELECT * FROM newstudent AS n JOIN grades AS g ON n.id = g.id ORDER BY n.id") or die (mysql_error()); $last_student = null; while ($row = mysql_fetch_assoc($q)) { if ($row['id'] !== $last_student) { $last_student = $row['id']; echo "Student ID: ".$row['id']."<br/>"; echo "First Name: ".$row['firstname']."<br/>"; echo "Last Name: ".$row['lastname']."<br/>"; echo "Email: ".$row['email']."<br/>"; echo "<br/>"; } print "<table id=reporttable>"; print "<tr id=toprow> <td>subject</td> <td>gradeone</td> <td>gradetwo</td> <td>gradethree</td> <td>average</td></tr>"; print "<tr>"; print " <td>"; print $row["subject"]; print "</td>" ; print " <td>"; print $row["gradeone"]; print "</td>" ; print " <td>"; print $row["gradetwo"]; print "</td>" ; print " <td>"; print $row["gradethree"]; print "</td>" ; while ($r = mysql_fetch_array($avg)) { print " <td>"; print $r['average']; print "</td>" ; } print " </tr>"; print "</table>"; }?>
Желаемый результат должен выглядеть следующим образом:
результат из следующего кода велик, но есть только одна незначительная проблема.
второй цикл while должен вычислять среднее значение и выводить каждую запись в новую строку. вместо этого он делает это:
кто-нибудь знает способ сделать так, чтобы каждый из этих средних классов соответствовал каждой строке для учеников?
$q = mysql_query(" SELECT n.id, n.firstname, n.lastname, n.email, g.gradeone, g.gradetwo, g.gradethree, ((g.gradeone + g.gradetwo + g.gradethree) / 3) AS average FROM newstudent n JOIN grades g USING (id) ORDER BY n.id ") or die (mysql_error());
Попробуйте использовать этот запрос, а затем выведите результаты в один цикл – удалите этот
while ($r = mysql_fetch_array($avg))
с его скобами.
Оставьте что-то вроде этого:
.... print "<td>$row['gradetwo']</td>"; print "<td>$row['gradethree']</td>"; print "<td>$row['average']</td>"; ....