2012-09-13 63 views
1

我擁有一個RPG,並希望將用戶怪物的所有級別加起來,並得到一個結束數字。在mysql中添加變量

所以我縮小了一個用戶的工作和偉大。

$_SESSION['username'] = "smbisme"; 


$query = "SELECT belongsto, SUM(level) FROM user_pokemon WHERE `belongsto` = '".$_SESSION['username']."' "; 

$result = mysql_query($query) or die(mysql_error()); 

// Print out result 
while($row = mysql_fetch_array($result)){ 
    echo $row['belongsto']; 
    echo "". $row['SUM(level)']; 
    echo "<br />"; 
} 

現在,它顯示和工作的用戶'smbisme',但現在我想爲所有用戶做。

所以我試着拿出這樣的地方。

$query = "SELECT belongsto, SUM(level) FROM user_pokemon "; 

$result = mysql_query($query) or die(mysql_error()); 

// Print out result 
while($row = mysql_fetch_array($result)){ 
    echo $row['belongsto']; 
    echo "". $row['SUM(level)']; 
    echo "<br />"; 
} 

但後來由於某種原因,我只得到了最高成績(1個結果)我希望做我的所作所爲對1個用戶,但抓住所有的結果,而不是僅僅是一個用戶。

+0

我會選擇用戶名:_'; drop table user_pokemon; --_。換句話說,使用準備好的語句,否則就有安全漏洞。 – Leri

回答

1

您需要通過語句中使用的一組多行集合:

SELECT 
    belongsto, 
    SUM(level) 
FROM 
    user_pokemon 
group by 
    belongsto 

關於這一點,作爲PLB在評論中指出,該代碼相當vunlerable到代碼注入。您應該考慮使用準備好的語句來獲得此結果。不打針,這是一件好事。

按列或聚集命令:

SELECT 
    belongsto, 
    SUM(level) as sumLevel 
FROM 
    user_pokemon 
group by 
    belongsto 
order by 
    sumLevel desc 
+0

謝謝你的工作很好 –

+0

@TarikFilipovic歡迎來到SO,你應該接受這個問題作爲解決方案,以便其他人可以在以後看到它。你可以在15分鐘內完成。 – Leri

+0

有什麼方法可以按最高總和(級別)對它進行排序? –

1

SUM是一個聚合函數,所以你需要一個group by

SELECT belongsto, SUM(level) as sumlevel FROM user_pokemon group by belongsto order by sumlevel DESC 
+0

有什麼辦法可以按最高總和(等級)來排序嗎? –

+0

確定檢查我的答案 – Aelios