Как я могу просмотреть двойную запись поля и показать только одну запись из других полей? - PullRequest
1 голос
/ 08 февраля 2011

Я хочу показать StudentNo, SubjectCode, SubjectDescription и оценку, но когда ученики получают неудовлетворительную оценку, создается еще одна запись для всех полей, так что мне нужно, чтобы однажды отобразить studentNo, SubjectCode и SubjectDescription, показывая 2 оценкив этом конкретном предмете этого студента .. Пример: enter image description here

Я хочу показать только так :( 07-08-061 EN110 5/1) Вот мой код:

**

mysql_select_db($database_strawman, $strawman);
$query_Recordset1 = "SELECT curriculum.SCode, curriculum.SDesc, grade.Grade, students.StudNo FROM students INNER JOIN (curriculum INNER JOIN grade ON curriculum.SCode = grade.GSCode) ON students.StudNo = grade.GStudNo GROUP BY StudNo";
$Recordset1 = mysql_query($query_Recordset1, $strawman) or die(mysql_error());

$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<table width="200" border="1">
  <tr>
    <td>Subject Code</td>
    <td>Subject Description</td>
    <td>Grade</td>
    <td>Student Number</td>
  </tr>
   <?php while($row_Recordset1 = mysql_fetch_assoc($Recordset1)){ ?>
  <tr>

    <td><?php  echo $row_Recordset1['SCode']; ?></td>
    <td><?php echo $row_Recordset1['SDesc']; ?></td>
    <td><?php echo $row_Recordset1['Grade']; ?></td>
    <td><?php echo $row_Recordset1['StudNo']; ?></td>

  </tr>
  <?php } ?>


</table>&nbsp;</p>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>
**

Ответы [ 3 ]

0 голосов
/ 08 февраля 2011

Группируйте по номеру и коду студента, используйте group_concat, чтобы получить 2 (+) оценки, перечисленные в группе.

SELECT *, group_concat(grade) as grades FROM students GROUP BY GSTudNo, GSCode

Это основы, чтобы использовать ваш запрос, это было бы что-то вроде:

SELECT curriculum.SCode, curriculum.SDesc, SUM(grade.Grade) grade_total, students.StudNo, group_concat (grade.Grade) as grades 
FROM students 
INNER JOIN (curriculum INNER JOIN grade ON curriculum.SCode = grade.GSCode) 
ON students.StudNo = grade.GStudNo 
GROUP BY StudNo, GSCode
0 голосов
/ 08 февраля 2011

Попробуйте использовать GROUP_CONCAT вместо SUM для вашей функции агрегирования:

SELECT c.SCode, c.SDesc, GROUP_CONCAT(g.Grade), s.StudNo 
    FROM students s
        INNER JOIN grade g 
            ON s.StudNo = g.GStudNo
        INNER JOIN curriculum c
            ON g.GSCode = c.SCode
    GROUP BY c.SCode, c.SDesc, s.StudNo 
0 голосов
/ 08 февраля 2011

Вы можете добавить предложение where как

where grade > 1 

(указать минимальный балл для прохождения)

...