标题没有说太多,所以我会尝试在这里解释。
我有一张桌子,
+------------+---------+------+-----+---------+----------------+
| 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'";
它将结果列为长字段 = id。
一切都在工作到这部分。我需要对这些返回的行的结果求和。$id是从用户单击的预定义列表生成的动态值。
我想要的是将字段 1+字段 2 求和,并在 id 更改时正确过滤它们。
我现在的结果看起来像这样,
id | sum( field1+field2)
----------------------------
1 | 10
50 | 22
13 | 80
我想求和 (10+22+80(。如前所述,显示的 id 或行数是动态的。根据用户选择进行更改。
如果需要多行,每行都有一个总计,请使用:
$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
进行了消毒。 如果没有,你就站在地雷上。
假设我们有一个名为 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).
现在,如果属性字段 1 的值为"6",属性字段 2 的值为"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">零。
现在,您是否要像下表中的内容一样求和(字段 1 + 字段 2(:
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'";
你的意思是你的问题?
我只是假设您要对具有属性字段 1 或属性字段 2 的所有行求和(字段 + 字段 2(,该行的值与其数据匹配:
$sql = "SELECT id , ( field1 + field2 ) AS `sum(field1+field2)` FROM tld WHERE field1 = '$field1' OR field2 = '$field2'";
如果变量 $field 1 保存值 "6">,变量 $field 2 保存值 "39">,则表结果将如下所示:
id | sum(field1+field2)
-----------------------------
1 | 10
13 | 80
考虑了我们假设的表数据在最上面!因为值为"6"的字段 1 与字段 2 的值有关系,即"4">,因此 (6 + 4( 的总和为 10。(字段 1 的值 41 + 字段 2 的值 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;
?>
您可以测试它是否可以工作。