数组总和给错误的值PHP

时间:2013-09-11 04:04:41

标签: php mysql

此代码有什么问题?

$data455 = mysql_query("SELECT ROUND(SUM(gainloss), 4) FROM stats WHERE MONTH(date) = MONTH(CURRENT_TIMESTAMP) AND winloss = 'Win'");
$info455 = mysql_fetch_array($data455);
$testarray = array_sum($info455);
echo $testarray;

它不显示正确的总和。我想获得最后一列'winloss'='win'

的总和

输出$ testarray给出的是79.5843,但正确的总和是41.6609。

这是我的数据库的样子。

Database

4 个答案:

答案 0 :(得分:2)

尝试

mysql_fetch_assoc($data455);

而不是

mysql_fetch_array($data455);

这可以帮到你,因为mysql_fetch_array会返回通过它获得混合结果的关联和索引数组。

答案 1 :(得分:2)

您不必像查询中那样使用array_sum已经有了总和

$data455 = mysql_query("SELECT ROUND(SUM(gainloss), 4) AS total FROM stats WHERE MONTH(date) = MONTH(CURRENT_TIMESTAMP) AND winloss = 'Win'");
$info455 = mysql_fetch_array($data455);
echo $info455['total']; //this should give you the desired result

答案 2 :(得分:1)

默认情况下,mysql_fetch_array将mysql中的数据作为数字和关联数组返回。这样做基本上可以使你的价值翻倍。更改为mysql_fetch_assoc()并查看结果。

http://php.net/manual/en/function.mysql-fetch-array.php

答案 3 :(得分:1)

看起来是数组和的问题。在那之后看看你的SQL和代码行

$info455 = mysql_fetch_array($data455);

变量$ info455包含类似

的数组
$info455['ROUND(SUM(gainloss), 4)'] = <some value>
$info455[0] = <some value>    

所以这里你的变量只保留一个值两次。所以array_sum会使值加倍。首先尝试查看您的SQL是否给出了正确的结果以及行数。如果你想要SQL中的多行然后使用PHP求和,那么你必须迭代结果集