2

标题没有说太多,所以我在这里尝试解释一下。

我有一张桌子,

+------------+---------+------+-----+---------+----------------+
| 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 或行数是动态的。根据用户选择进行更改。

4

2 回答 2

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. 如果没有,你就站在了地雷上

于 2013-02-05T00:19:41.297 回答
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”的field1field2值为“4”有关系,因此(6 + 4)之和为10。而(field1的值41 + field2的值39)之和是 80。现在,您想对属性sum(field1+field2)的行中提到的(10 + 80)求和吗?我们可以使用 PHP 脚本来处理它,如果你使用的是 MySQL,就像这样:

<?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;
?>

你可以测试它是否可以工作..

于 2013-04-13T08:22:46.133 回答