2013-02-11 71 views
1

想知道將列中的所有值一起添加到列中的pid = $ pid的最佳方式是什麼。MySQL如何將所有列添加到一起,其中pid = X

下面是我用什麼樣的一些示例代碼:

$query = mysql_query("SELECT pid, reputation FROM reputation WHERE pid=\"{$post['pid']}\""); 

while($rep = mysql_fetch_assoc($query)) 
{ 
    echo $rep['reputation']; 
} 

這工作正常,但是當一個以上的行存在,其中的pid = XI需要對這些行的聲譽列在一起,並輸出加結果。

+0

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – j0k 2013-02-11 09:14:24

回答

2

使用GROUP BY

SELECT pid, SUM(reputation) totalReputation 
FROM reputation 
WHERE pid = 0 
GROUP BY pid 

在PHP

$query = mysql_query("SELECT pid, SUM(reputation) totalReputation 
         FROM reputation 
         WHERE pid = " .$post['pid'] ." 
         GROUP BY pid"); 

和取別名

echo $rep['totalReputation']; 

作爲旁註,查詢是用SQL Injection脆弱如果值(小號 )的變量來自於外面。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

+0

+1詳細信息和使用別名 – 2013-02-11 09:04:56

+0

謝謝@JW。我已經在腳本中對輸入進行了清理。它現在正在添加列的總數,但它只顯示第一個PID,而不是其他列。我怎樣才能循環每一個?我正在使用:while($ rep = mysql_fetch_assoc($ query)) { echo $ rep ['totalReputation']; } – user2059565 2013-02-11 09:12:18

+0

你在查詢中有WHERE pid = x嗎? – 2013-02-11 09:13:42

1
$query = mysql_query("SELECT SUM(reputation) as rep FROM reputation WHERE pid=\"{$post['pid']}\""); 

while($rep = mysql_fetch_assoc($query)) 
{ 
    echo $rep['rep']; 
} 

注意:你不應該使用mysql_ *擴展,因爲他們現在已經過時。

+0

echo $ rep ['reputation'];應該是echo $ rep ['SUM(reputation)']; – 2013-02-11 09:03:56

+0

謝謝,我現在得到了這個解決方案:) – user2059565 2013-02-11 09:19:08