对sql中多个表的算术运算

时间:2018-04-24 04:04:01

标签: php

我正在使用PHP开发一个SMS项目,所以我有4个表,test,test2,考试和总数 我正在寻找一个查询或一种方法来对前三个表进行算术运算并存储它总计,搜索后我没有找到,我想出了下面的代码:

      $sql1 = "SELECT * FROM f_test";
                $result1 = $connect->query($sql1);
                $row1 =mysqli_fetch_assoc($result1)

                $sql2 = "SELECT * FROM exam";
                $result2 = $connect->query($sql2);
                $row2 =mysqli_fetch_assoc($result2);

                $sql3 = "SELECT * FROM exam";
                $result3 = $connect->query($sql3);
                $row3 =mysqli_fetch_assoc($result3);


                 $var1= $row1['english'];
                 $var2 = $row2['english'];
                  $var3 = $row3['english'];


                 $var4 = ($var1 + $var2 + $var3);

                 echo "<br>" . $var4;
                }
                }
           }

我尝试使用while循环进行循环,但它没有按照我想要的方式进行。有什么建议吗?

    $sql1 = "SELECT * FROM f_test";
                $result1 = $connect->query($sql1);
                while ($row1 =mysqli_fetch_assoc($result1)){

                $sql2 = "SELECT * FROM exam";
                $result2 = $connect->query($sql2);
                while($row2 =mysqli_fetch_assoc($result2)){

                $sql3 = "SELECT * FROM exam";
                $result3 = $connect->query($sql3);
                while($row3 =mysqli_fetch_assoc($result3)){


                 $var1= $row1['english'];
                 $var2 = $row2['english'];
                  $var3 = $row3['english'];


                 $var4 = ($var1 + $var2 + $var3);

                 echo "<br>" . $var4;
                }
                }
            }

1 个答案:

答案 0 :(得分:0)

如果我已正确理解您的问题,您有三个关系,其中包含一些类似的数据,您需要聚合/汇总,您需要将聚合插入第4个表格,比如total

你的方法对我来说似乎太贵了。你可以做你想做的事情(而不是你已经做过的事情),但是你现在的表现如何过于昂贵和资源方面的详尽无遗。由于您正在寻找查询或某种方式,我可以建议以下内容。

如果是我,我会做类似的事情。

假设有两个表,即test1test2。他们的定义和数据如下。在这里,我再次假设您正在使用 MySQL 。这可以在任何DBMS中完成,但 HOW-TO 会因此而异。

CREATE TABLE test1(
    id INT PRIMARY KEY AUTO_INCREMENT,
    mark INT NOT NULL
);

CREATE TABLE test2(
    id INT PRIMARY KEY AUTO_INCREMENT,
    mark INT NOT NULL
);

INSERT INTO test1(mark) VALUES(10);
INSERT INTO test1(mark) VALUES(20);
INSERT INTO test1(mark) VALUES(30);

INSERT INTO test2(mark) VALUES(20);
INSERT INTO test2(mark) VALUES(30);
INSERT INTO test2(mark) VALUES(40);

现在,我需要获取两个表中字段mark的总和(注意,字段在其属性方面是匹配的)。我可以运行SQL查询,如下所示。 注意 UNION ALL子句,它不会忽略重复项。

SELECT SUM(mark) FROM (SELECT mark FROM test1 UNION ALL SELECT mark FROM test2) u;

这会给你一个如下结果。

+---------+
|SUM(mark)|
+---------+
|150      |
+---------+

这个结果,你可以进入php脚本,然后从php运行另一个INSERT INTO total SQL语句。这也没有必要。因为您可以增强上面的SQL查询,所以也可以执行插入。我把它留给你。可以在this SQLFiddle

中看到MySQL 5.6工作表单中的上述示例