我目前有这个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
答案 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中有更详细的讨论。