0

私はこれを達成するために多くのことを試みましたが成功しなかったので、助けを求めてここにいます. 必要な最善の解決策を自分で見つけられるように、詳細を説明します。

私のMySQLデータベースから

Table (students)
--------------------------------
studentID | class_id | and other info


Table (class)
-------------------------------
classID | name | other info


Table (subjects)
--------------------------------
subjectID | name | class_id (references Class.classID)


Table (exam_type)
--------------------------------
exam_typeID | name | desc | start_date


Table (result)
---------------------------------------------
student_id | exam_type_id | subject_id | mark

私のクエリでは、これがあります:

SELECT subjects.name, exam_type.name, result.mark FROM subjects 
LEFT JOIN result ON result.subject_id=subjects.subjectID 
JOIN exam_type ON exam_type.exam_typeID=result.exam_type_id 
WHERE result.student_id=$x 
ORDER BY 
subjects.name, exam_type.name

クエリの $x は、結果を表示する生徒の ID です。

クエリはこれを返します

私のデータベースのダミーデータからの結果が表示されます

このレベルまではほとんど問題ありません。私の頭痛の種は、結果をそのような方法で置き換えたいということです...すでに私のデザインを参照してください。

フロントエンド

誰かが私を正しい方向に向けて、最初の写真の情報をそのように置き換えることができれば、それは本当に役に立ちます.

----------------------------------------------
                            CA Tests  | Exams
-----------------------------------------------
subjects             |  1  |  2  |  3 | score
-----------------------------------------------
Agricultural science | 10  | 9   | 8  | 56
-----------------------------------------------
English language     | 12  | 13  | 12 | 43
-----------------------------------------------
French Language      | 11  |     |    |  

解決済み: JIML のソリューションによる 解決した

4

1 に答える 1

0

同じ名前の 2 つの列を取得しないように SQL を変更します。

SELECT subjects.name, exam_type.name, result.mark FROM subjects 
-->
SELECT subjects.name, exam_type.name as test, result.mark FROM subjects 

次に、次のようなことができます(データベースからの結果をシミュレートしました)

$result = array(
  0 => array(
    'name' => 'Agricultural Science',
    'test' => 'CA 1',
    'mark' => 10
  ),
  1 => array(
    'name' => 'Agricultural Science',
    'test' => 'CA 2',
    'mark' => 9
  ),
  2 => array(
    'name' => 'Agricultural Science',
    'test' => 'CA 3',
    'mark' => 8
  ),
  3 => array(
    'name' => 'Agricultural Science',
    'test' => 'Exam',
    'mark' => 56
  ),
  4 => array(
    'name' => 'English Language',
    'test' => 'CA 1',
    'mark' => 12
  ),
  5 => array(
    'name' => 'English Language',
    'test' => 'CA 2',
    'mark' => 13
  ),
  6 => array(
    'name' => 'English Language',
    'test' => 'CA 3',
    'mark' => 12
  ),
  7 => array(
    'name' => 'English Language',
    'test' => 'Exam',
    'mark' => 43
  )
);

$data = array();
foreach ($result as $row) {
  $data[$row['name']]['marks'][$row['test']] = $row['mark'];
}

?>
CA test | Exams<br />
<?php
foreach ($data as $name => $row) {
  echo $name . ' | ' . $row['marks']['CA 1'] . ' | ' . $row['marks']['CA 2'] . ' | ' . $row['marks']['CA 3'] . ' | ' . $row['marks']['Exam'] . '<br />';
}

出力

CA test | Exams
Agricultural Science | 10 | 9 | 8 | 56
English Language | 12 | 13 | 12 | 43

次に、テーブルを生成する方法に追加します。

于 2013-09-03T08:03:49.540 に答える