Запрос суммы для двух полей в двух разных таблицах PHP - PullRequest
0 голосов
/ 28 апреля 2020

У меня проблема с получением нужного мне результата. Я хочу суммировать другую таблицу gg_hp на основе gg_id

+--------------+----------+-------+------------+
| sg_name      | sg_grade | gg_id | subject_id |
+--------------+----------+-------+------------+
| Quiz 1       |       20 |    14 |         68 |
| Midterm Exam |       50 |    15 |         68 |
| Quiz 2       |       50 |    14 |         68 |
+-------+--------------+----------+-------+----+

tbl_gradesubcateg
+-------+--------------+------------+------------+------------+------------+-------+
| gg_id | categname    | percentage | gradecount | teacher_id | subject_id | gg_hp |
+-------+--------------+------------+------------+------------+------------+-------+
|    14 | Quiz         |         10 |       NULL |          4 |         68 |     0 |
|    15 | Midterm Exam |         20 |       NULL |          4 |         68 |     0 |
+-------+--------------+------------+------------+------------+------------+-------+

This is my expected output
+-------+--------------+------------+------------+------------+------------+-------+
| gg_id | categname    | percentage | gradecount | teacher_id | subject_id | gg_hp |
+-------+--------------+------------+------------+------------+------------+-------+
|    14 | Quiz         |         10 |       NULL |          4 |         68 |   70 |
|    15 | Midterm Exam |         20 |       NULL |          4 |         68 |   50  |
+-------+--------------+------------+------------+------------+------------+-------+

Это запрос, который я сделал, но .. Я не получаю точный результат.

    $querycount = "SELECT * FROM tbl_gradesubcateg order by gg_id asc ";
                                            $query_run = mysqli_query($con,$querycount);

                                            $sums= 0;
                                            $ctr = 0;
                                            $id1 = "";
                                            while ($num = mysqli_fetch_assoc ($query_run)) {
                                                $sums += $num['sg_grade'];
                                                $id= $num['gg_id'];
                                                if($id == $id1)
                                                {
                                                    $queryhp = mysqli_query($con,"UPDATE tbl_gradecateg SET gg_hp = '".$sums."' where gg_id='".$id."'")  or die(mysqli_error($con));
                                                }
                                                else
                                                {
                                                    $queryhp = mysqli_query($con,"UPDATE tbl_gradecateg SET gg_hp = '".$sums."' where gg_id='".$id."'")  or die(mysqli_error($con));
                                                    $sums= 0;

                                                }
                                                $id1= $num['gg_id'];
                                            }
    ```

Любые мысли были бы хорошими.

1 Ответ

0 голосов
/ 28 апреля 2020

Коррелированный подзапрос - это простой подход:

update tbl_gradesubcateg gs
    set sg_grade = (select sum(sg.g_grade)
                    from gg_hp g
                    where g.gg_id = gs.gg_id
                   );

Однако я не рекомендую делать это вычисление. Это достаточно просто для агрегирования при запросе таблицы. Суммирование результатов просто означает, что они устарели, когда в следующий раз строки будут добавлены, обновлены или удалены в таблицах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...