php - how to calculate the sum of grades for each student -
i have 1 table grades of exams, , students (the students table have 10 students only).
i want output array in json format students details sum of grades of each semester in array of array.
expected output
[ { "id": "1", -> semester id "student1": {"id": "1","name": "student name", "bio": "50", "chem": "50", "math": "60", "total grades": "160"}, "student2": {"id": "2","name": "secondstudent name", "bio": "60", "chem": "60", "math": "50", "total grades": "170"}, } ] here tables structure
tbstudents
id , name 1 , student name 2 , secondstudent name 3 , thirdstudent name tbgrades
id , student , semster , bio , chem , math , total 1 , 1 , 1 , 50 , 50 , 60 , 160 2 , 2 , 1 , 30 , 40 , 20 , 90 3 , 2 , 1 , 30 , 20 , 30 , 80 challenge
how calculate sum of each bio, chem, math, total each student semester, cause student might have multiple grades in same semester
what i've tried
$sql = "select grade.id g_id, grade.semester g_semester, grade.bio g_bio, grade.chem g_chem, grade.math g_math, grade.total g_total, student.id s_id, student.name s_name tbgrades grade inner join tbstudents student on student.id = grade.student"; try { $db = new db(); $db = $db->connect(); $stmt = $db->prepare($sql); $stmt->execute(); $grade = $stmt->fetchall(pdo::fetch_obj); $db = null; if(empty($grade)) { $response->getbody()->write (' { "error": { "status":"400", "message":"invalid request" } }'); } else { foreach($grade $value) { $array_resp[]=[ 'id' => $value->g_id, 'student1' => ['id'=>$value->s_id, 'name'=>$value->s_name, 'bio'=>$value->g_bio, 'chem'=>$value->g_chem, 'math'=>$value->g_math, 'total grades'=>$value->g_total], ]; } $response->getbody()->write(json_encode($array_resp)); } } catch(pdoexception $e) { $response->getbody()->write (' { "error": { "message":'. $e->getmessage() .' } }'); }
you can using mysql group by clause.
select grade.id g_id, grade.semester g_semester, sum(grade.bio) g_bio, sum(grade.chem) g_chem, sum(grade.math) g_math, sum(grade.total) g_total, student.id s_id, student.name s_name tbgrades grade inner join tbstudents student on student.id = grade.student group student.id, grade.semester
Comments
Post a Comment