我拥有一个RPG并希望将所有级别的用户怪物加起来并得到一个结束号码。
因此,我将其缩小为一个用户并且效果很好。
$_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 :(得分:1)
您需要对多行聚合使用group by语句:
SELECT
belongsto,
SUM(level)
FROM
user_pokemon
group by
belongsto
就此而言,正如PLB在评论中指出的那样,这段代码对于代码注入来说是相当可靠的。您应该考虑使用预准备语句来获得此结果。没有注射,这是一件好事。
按列或汇总排序:
SELECT
belongsto,
SUM(level) as sumLevel
FROM
user_pokemon
group by
belongsto
order by
sumLevel desc
答案 1 :(得分:1)
SUM
是一个聚合函数,因此您需要group by
SELECT belongsto, SUM(level) as sumlevel FROM user_pokemon group by belongsto order by sumlevel DESC