求和(属性“field1”+属性“field2”)然后求和所有结果的行

时间:2013-02-05 00:11:03

标签: php mysql

标题并没有多说,所以我会在这里解释一下。

我有一张桌子,

+------------+---------+------+-----+---------+----------------+
| Field      | Type    | Null | Key | Default | Extra          |
+------------+---------+------+-----+---------+----------------+
| id         | int(11) | NO   | PRI | NULL    | auto_increment |
| field1     | int(11) | NO   |     | NULL    |                |
| field2     | int(11) | YES  |     | NULL    |                |
+------------+---------+------+-----+---------+----------------+

显示结果,

$sql = "SELECT field1, field2 FROM tbl WHERE field1 = '$id' OR field2 = '$id'";

它将结果列为long field = id。

直到这一部分,一切都有效。我需要将这些返回行的结果相加。 $ id是从用户点击的预定义列表生成的动态值。

我想要的是对field1 + field2求和,并在更改id时正确过滤它们。

我的结果现在看起来像这样,

id    |   sum( field1+field2)
----------------------------
1     |    10
50    |    22
13    |    80

我想要总和(10 + 22 + 80)。如上所述,显示多少个id或行是动态的。根据用户选择进行更改。

2 个答案:

答案 0 :(得分:4)

如果您想要多行,每行都有一行,请使用:

$sql = "SELECT (field1+field2) as the_row_total FROM tbl WHERE field1 = '$id' OR field2 = '$id'";

如果您想要总体总计,请使用:

$sql = "SELECT SUM(field1+field2) as the_grand_total FROM tbl WHERE field1 = '$id' OR field2 = '$id'";

注意:我假设您已清理过$id。如果没有,那你就是standing on a landmine

答案 1 :(得分:1)

让我们假设我们有一个名为 tbl 的表:

id    |    field1    |    field2
--------------------------------
1     |    6         |    4
50    |    10        |    12
13    |    41        |    39

您问题的SQL查询:

$sql = "SELECT field1, field2 FROM tbl WHERE field1 = '$id' OR field2 = '$id'";

当变量 $ id 包含值“1”,例如$id = 1;时,结果将为:

MySQL returned an empty result set (i.e. zero rows).

现在,如果属性 field1 的值为“6”且属性 field2 的值为“39 “,结果将是:

id    |    field1    |    field2
--------------------------------
1     |    6         |    4
13    |    41        |    39

但是如果您的SQL查询是这样的:

$sql = "SELECT field1, field2 FROM tbl WHERE id = '$id'";

变量 $ id 包含值“0”,结果将是:

id    |    field1    |    field2
--------------------------------
50    |    10        |    12

因为该行 id 的值“50”“0”为零。


现在,您想要将(field1 + field2)与此表中的内容相加:

id    |    sum(field1+field2)
-----------------------------
1     |    10
50    |    22
13    |    80

那么,你的意思是你的SQL查询有多个OR运算符,如下所示:

$sql = "SELECT field1, field2 FROM tbl WHERE field1 = '$field1' OR field2 = '$field2' OR field1 = '$field3'";

或者这个:

$sql = "SELECT field1, field2 FROM tbl WHERE id = '$id1' OR id = '$id2' OR $id = '$id3'";

你对你的问题意味着什么?


我只是假设您想要将具有属性 field1 或属性 field2 的所有行的(field1 + field2)求和与他们的数据匹配的值:

$sql = "SELECT id , ( field1 + field2 ) AS `sum(field1+field2)` FROM tld WHERE field1 = '$field1' OR field2 = '$field2'";

如果变量 $ field1 包含“6”的值并且变量 $ field2 成立,则表格结果如下所示“39”的值

id    |    sum(field1+field2)
-----------------------------
1     |    10
13    |    80

在最顶层考虑我们假设的表格数据!因为值“6” field1 field2 的值有关系,“4”,因此(6 + 4)的总和是10.而(field1的值41 + field2的值39)的总和是80.现在,你想要在 sum(field1 + field2)属性的行上提到(10 + 80)的总和?我们可以使用PHP脚本来处理它,如果你使用的话是这样的:

<?php
$connection = mysqli_connect($host, $user, $password, $database);

$sql = "SELECT id , ( field1 + field2 ) AS `sum(field1+field2)` FROM tld WHERE field1 = '$field1' OR field2 = '$field2'";

$result = mysqli_query($connection, $sql);

while($row = mysqli_fetch_array($result)) {
    $sum += $row['sum(field1+field2)'];
}

echo 'The sum is: ' . $sum;
?>

你可以测试它是否有用..