0

互いにリンクする 3 つのテーブルがあります。私がやりたいことは、クラスのすべての学生のレポート カードを生成することです。

テーブルの学生情報

name      sex age students_ID
--------- --- --- -----------
Kinsley   M    12           1
Michael   m    12           2
Rhianna   f    22           3

テーブルスコアパネル

1stCA 2ndCA exam students_ID subjectID
----- ----- ---- ----------- ---------
   23    15   42           1         1
   10    12    7           1         2
   43    15   62           1         3
   10    12   27           2         1
   10    12   57           2         2
   23    15   12           2         3
   11    12   27           3         1
   04    12   57           3         2
   13    25   12           3         3

の件名

subjectname subjectID
----------- ---------
english             1
maths               2
biology             3

結果は次のようになります。

NAME KINSLEY
SEX M
AGE 12

とレポートカードが続きます

subject   1stCA 2ndCA EXAM
--------- ----- ----- ----
english      23    15   42
maths        10    12    7
Biology      43    15   62

...など、すべての生徒に

すべての代わりに取得された 1 つの科目とスコアのみ

<?php
include("connect.php");

$generate="SELECT students_info.name, subject.subjectname, scores_panel.1stCA, scores_panel.2ndCA, scores_panel.EXAM
FROM
students_info
LEFT JOIN
scores_panel
ON students_info.students_ID=scores_panel.students_ID
LEFT JOIN
subject
ON
subject.subjectID=scores_panel.subjectID
GROUP BY scores_panel.subjectID  ";

$fetch=mysql_query($generate);
while($row=mysql_fetch_array($fetch)or die(mysql_error()))
{
?>
**NAME:** 
<?PHP echo $row['name']; ?>
subject 1stCA 2ndCA EXAM
----------
<?PHP echo $row['subjectname']; ?>
<?PHP echo $row['1stCA']; ?>     
<?PHP echo $row['2ndCA']; ?>   
<?PHP echo $row['EXAM']; ?>

THIS IS YOUR REPORT CARD 
<?PHP } ?>

機能しますが、生徒ごとに 1 つの科目しか表示されません。

  NAME Rhianna 
    SEX F
    AGE 22

とレポートカードが続きます

subject   1stCA 2ndCA EXAM
--------- ----- ----- ----
english      11    12   27

名前 キンズリー 性別 M 年齢 12

とレポートカードが続きます

subject   1stCA 2ndCA EXAM
--------- ----- ----- ----
english      23    15   42

このようなものの代わりに:

  NAME KINSLEY
    SEX M
    AGE 12

とレポートカードが続きます

subject   1stCA 2ndCA EXAM
--------- ----- ----- ----
english      23    15   42
maths        10    12    7
Biology      43    15   62


  NAME Rhianna 
    SEX F
    AGE 22

とレポートカードが続きます

subject   1stCA 2ndCA EXAM
--------- ----- ----- ----
english      11    12   27
maths        04    12    57
Biology      13    25   12

...など、すべての学生に。

あなたの助けに感謝します

ありがとう

4

2 に答える 2

0

データを取得して表示するプロセスにはいくつかの欠陥があります。主な欠陥は、「GROUP BY」ステートメントの制限にあるようです。複数の解決策がありますが、1 つのクエリを実行するだけで済む簡単な解決策を示します。

実際、プロセスは 2 つのループで構成されています。1 つは学生を取得するループで、もう 1 つは結果を取得するループです。次のようになります。

<?php
include("connect.php");

$generate="SELECT students_info.students_ID, students_info.name, subject.subjectname, scores_panel.1stCA, scores_panel.2ndCA, scores_panel.EXAM
FROM
students_info
LEFT JOIN
scores_panel
ON students_info.students_ID=scores_panel.students_ID
LEFT JOIN
subject
ON
subject.subjectID=scores_panel.subjectID
ORDER BY students_info.name ASC
";

$fetch=mysql_query($generate);
$previousId = -1;
while($row=mysql_fetch_array($fetch)or die(mysql_error()))
{
    if($row['students_ID'] != $previousId)
    {
        //New student: show name [and other info]
        echo "**" . $row['name'] . "**";
        echo "subject 1stCA 2ndCA EXAM";
        echo "------------------------";

        $previousId = $row['students_ID'];
    }
    ?>
<?PHP echo $row['subjectname']; ?>
<?PHP echo $row['1stCA']; ?>     
<?PHP echo $row['2ndCA']; ?>   
<?PHP echo $row['EXAM']; ?>

THIS IS YOUR REPORT CARD
<?php
}
?>

何が起こっていますか?SQL 出力のすべての行には、学生 ID とその個人情報が含まれています。これは、(テーブル ヘッダーと一緒に) 1 回だけ表示する必要があります。つまり、新しい学生が出力に表示されるときです。変数$previousIdはそのために使用されます。次に、すべてのデータがその成績表に表示されます。

phpMyAdmin に精通している場合は、いつでも SQL コードをテストして、生成される内容を確認できます。

幸運を!

于 2013-08-07T12:22:01.117 に答える
0

あなたはとても近いです。students_info.students_IDクラウスによるグループで見逃したばかり

SELECT students_info.name, subject.subjectname, scores_panel.1stCA, scores_panel.2ndCA, scores_panel.EXAM
FROM
students_info
LEFT JOIN
scores_panel
ON students_info.students_ID=scores_panel.students_ID
LEFT JOIN
subject
ON
subject.subjectID=scores_panel.subjectID
GROUP BY students_info.students_ID,scores_panel.subjectID

フィドル

于 2013-08-07T12:11:40.383 に答える