2016-07-27 91 views
2

你能幫我嗎?如果你可以提供答案和解釋,我會更感激,因爲我想了解更多,我已經真正感謝這個社區。學習幫助我很多。但只有答案對我來說足夠好,因爲我真的需要這個代碼。PHP&MySQL:顯示某物的總和,按不同類別分類

好的,現在我將定義問題。

現在,讓我說我有這些列的表。 tbl_transaction - > id | ref |描述|值|類別|子類別

值是一個整數列類型,具有一定數量的值。例如100000或200000。

類別和子類別是包含類別和子類別的VARCHAR類型列。

我希望的輸出是它會根據其類別顯示值的總和。對於這個邏輯,我試過這個查詢(它不是一個有效的mySQL代碼標準,只是想顯示一個邏輯)。

X = select DISTINCT category from tbl_transaction; 
select SUM(value) from tbl_transaction WHERE category='X'; 

它實際上在MySQL上運行良好。但我也想把這個結果打印到PHP。問題是我不能打印此值以及SUM和DISTINCT類別。我想要的東西(在PHP輸出/回聲):

類別|類別合計

A | 100000

B | 400000

C | 500000

我在php上試過這些代碼,它只打印類別,但不是類別的總和。

$query1=mysql_query("select DISTINCT category from tbl_transaction"); 
echo "<table><tr><td>Category</td>"; 
while($query2=mysql_fetch_array($query1)) 
{ 
echo "<tr><td>".$query2['category']."</td></tr></table>"; 

$query3=mysql_query("select SUM(value) from tbl_transaction WHERE category ="(select DISTINCT category from tbl_transaction)""); 
echo "<table><tr><td>SUM of Category</td>"; 
while($query4=mysql_fetch_array($query3)) 
{ 
echo "<tr><td>".$query4['value']."</td></tr></table>"; 
} 

} 

我試了幾次,結果爲null/resource id#7/error。更重要的是,我實際上想要這樣的東西。

A類

子類A - 子類的總量

子類別乙 - 子類B的總量

子C類 - 子C類

的總量

總計 - 類別A的總金額

類別B

子類A - 子類的總量

子類別乙 - 子類B的總量

子C類 - 類別的總量 - 子C類

合計的總金額B

在此先感謝您,Stackoverflow社區。

+0

在'$ query3'的行上,由於外部字符串用雙引號括起來,因此不能在不使用雙引號的情況下使用雙引號。或者使用單引號或者像'\'轉義它們' –

+2

***請[停止使用'mysql_ *'函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions在PHP 7中已經刪除了*** [這些擴展](http://php.net/manual/en/migration70.removed-exts-sapis.php)。瞭解[prepared](http ://en.wikipedia.org/wiki/Prepared_statement)[PDO](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http:// php。 net/manual/en/mysqli.quickstart.prepared-statements.php)並考慮使用PDO,[這真的很簡單](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

@JeremyHarris非常感謝你,我以前我不知道,下一次我會嘗試使用單引號或者按照你的建議轉義它們 –

回答

1

你可以嘗試一個SQL語句就這樣被一列的值相加分組:

SELECT SUM(value) as Total_val, category FROM tbl_transaction GROUP BY category 

而且你可以在PHP中使用這樣的: (我將與PDO因爲mysql_命令的類型現在變老,不推薦)

//Creating connection 
$connection=new PDO("mysql:host=127.0.0.1;dbname=database_name","root",""); 

//Creating main query, fetching main categories 
$query=$connection->prepare("SELECT category, SUM(value) as MAIN_CAT_TOTAL_VAL FROM tbl_transaction GROUP BY category"); 
$query->execute(); //executing query 

foreach($query->fetchAll() as $q) //fetching results 
{ 
    echo "<b>".$q["category"].":<br/></b>"; //printing main category name 

    //creating second query which sums value column and groups by sub category 
    $query2=$connection->prepare("SELECT SUM(value) as TOTAL_VALUE, sub-category FROM tbl_transaction WHERE category=:p1 GROUP BY sub-category"); 
    $query2->bindParam(":p1",$q["category"],PDO::PARAM_STR); //binding parameter to second query 
    $query2->execute(); //executing second query 
    foreach($query2->fetchAll() as $q2) //fetching the results 
    { 
     echo $q2["sub-category"]." -> ".$q2["TOTAL_VALUE"]."<br/>"; //printing the results 
    } 

    echo "total amount of category ".$q["category"]." = ".$q["MAIN_CAT_TOTAL_VAL"]; 
    echo "<hr/>"; //cosmetics 
} 

這應該工作,如果你編輯它適當。如果你不確定如何使用PDO,它可能會有點複雜,我建議你看看它。

+1

我現在肯定嘗試這個,希望我能成功。我會通知你,並非常感謝你的代碼,我真的很感激它。 –

+1

我試過了,工作得很好。非常感謝你,你只是幫助我。我將學習這段代碼的模式,所以我可以在稍後使用這段代碼來處理不同但相似的情況。再一次,非常感謝你。 –