php中的SQL SUM行

时间:2015-11-01 00:49:15

标签: mysql sql sum

我目前有这个SQL语句,如果表中只有一行但是如果有多行则不起作用。

$mon = mysql_query("SELECT SUM(amount)AS `ingame` FROM `players` WHERE `playername` = '$player'")or die(mysql_error());
$money = mysql_fetch_assoc($mon);
$moneyingame = $amount['ingame'];

表格的一个例子

PLAYERNAME AMOUNT
player1    100
player1    100
player2    100
player3    100

所以当我在代码中运行SQL时,如果它应该返回200

1 个答案:

答案 0 :(得分:0)

SUM是一个聚合函数,意味着它适用于行组。要有意义地使用它,您必须告诉SQL这些组具有GROUP BY

SELECT SUM(amount) AS ingame
FROM players
WHERE playername = ?
GROUP BY playername

我还会注意到mysql_query is deprecated。您应该使用MySQLi,或者更好的是,数据库不可知PDO

您也不应该将变量直接放入SQL查询中。这会创建一个非常常见的安全漏洞,称为SQL Injection Attack。相反,请使用prepared statements and bind parameters

$sth = $dbh->prepare("
    SELECT SUM(amount) AS ingame
    FROM players 
    WHERE playername = :playername
    GROUP BY playername
");
$sth->execute(array(':playername' => "player1"));
$ingame = $sth->fetchColumn();

这在this answer中有更详细的讨论。