2013-02-05 55 views
2

標題沒有說太多,所以我會試着在這裏解釋。總和(屬性「field1」+屬性「field2」),然後總和所有結果的行

我有一個表,

+------------+---------+------+-----+---------+----------------+ 
| 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是從用戶點擊的預定義列表中生成的動態值。

我想要的是總結field1 + field2,並讓它們在id更改時正確過濾。

我的結果,現在看起來是這樣的,

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

我要總結(10 + 22 + 80)。如上所述,顯示多少個ID或行是動態的。根據用戶選擇進行更改。

+2

你希望下列哪一項? (所有field1的總和)+(所有field2的總和),還是sum(field1 + field2)? –

+0

或者在每次使用包含每列的總和的union子句進行過濾時重新運行sql。或使用JavaScript。 –

+0

我編輯了我的評論 - 你想要_total_,還是每個單獨行的單獨總和? –

回答

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闕RY是這樣這樣的:

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

和變量$ ID持有價值「0」,那麼結果將是:

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

因爲有一個「0」零的值爲「50」的屬性id,在該行上。


現在,你要總結(字段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)所有具有屬性FIELD1或屬性場2行的是那對他們的數據相匹配的值:

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

表結果將類似於下,如果變量$ FIELD1持有「6」值和變量$域2持有「39」值:

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

考慮我們的假設表的最頂端的數據!因爲FIELD1的值「6」對的FIELD2「4」值的關係,因此的(6 + 4)是10並且總和之和(field1的值爲41 + field2的值爲39)爲80.現在,您想要總和(10 + 80),如屬性sum(field1 + field2)?我們可以使用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; 
?> 

你可以測試它,如果它會運行

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

+0

對不起,但沒有解決問題。 –

+0

對不起,您需要提供更多信息才能提供幫助。在你的問題中有一些不明確的地方(因此我的雙重答案),所以你可以編輯這個問題來澄清一些示例表格數據和你期望回來的東西嗎? –

+0

你說得對,我編輯了我的問題(最後)。 –