2012-07-03 63 views
0

的结果我有一个查询,其中输出处理是这样的:如何总结查询

while($row = mysql_fetch_array($result)){ 
    echo $row['username'] . " " . $row['earning']; 
} 

并输出结果是这样的:

JOHN 200 
JOHN 350 
NEO 100 
NEO 220 

我想实现的是,每名称出现一次,“收入”是该名称的所有收入的总和,如下所示:

JOHN 550 
NEO 320 

我不得不提及I 不能更改查询;这是最大的问题。

有没有希望?一些建议? :)

+2

您发布的代码不是查询 –

+0

@MarcioSimao OP无法更改查询。 – Daedalus

+0

@Nikola K,但它是查询结果:P – SomeoneS

回答

4

您可以将循环中的值与另一个数组相加,然后输出它。

尝试:

$earnings = array(); 

while($row = mysql_fetch_array($result)) { 
    if (!isset($earnings[$row['username']])) $earnings[$row['username']] = 0; 
    $earnings[$row['username']] += $row['earning']; 
} 

foreach($earnings as $user => $earnings) { 
    echo "$user $earnings<br />\n"; 
} 
+0

不是数组元素的默认数值零,所以'if'部分是多余的? –

+0

如果您在设置之前尝试对其进行操作,PHP将发出关于未定义索引的通知,因此会发出'isset'检查。 – drew010

+0

真的吗?自从我上次使用PHP以来,这足够长,这完全有可能,但它肯定不总是如此。 –

4

尝试:

$user = array(); 

while($row = mysql_fetch_array($result)){ 
    $user[$row['username']] += $row['earning']; 
} 

做回声:

foreach($user as $key => $value) { 
    echo $key."=". $earnings."<br>"; 
} 
+0

非常不好的方法...最好在查询 –

+3

@NikolaK中使用GROUP BY。 ...... OP不能做什么。 – Daedalus

+0

@NikolaK。同意,除了改变查询被禁止,似乎。 –

0

,而不只是选择的数据,选择字段和SUM(otherfield)otherfield是现场与待求和的数量。然后在第一个字段中添加GROUP BY

+2

这看起来像查询的变化,用户不能这样做,尽管这是最明智的解决方案。 –

1

要快速解决这个答案你可能想简单地添加这些结果相关的数组,然后简单地遍历它来获得最终的计数。

所以,这样的事情:

$names= array(); 

while($row = mysql_fetch_array($result)){ 
    $names[$row["username"]] += $row["earning"]; 
} 

foreach($names as $k => $v) { 
    echo $k." ".$v."\n"; 
} 
+0

请参阅[drew010]的答案(http://stackoverflow.com/questions/11318333/how-to-sum - 查询结果/ 11318408#11318408)使用'isset()'。 –

0

试试这个在mysql中端,你不需要在PHP端来计算,所以不要改变你的PHP端代码JST改变这样的查询

SELECT 
    username, 
    SUM(earning) 
FROM yourtable 
GROUP BY (username) 

希望它能为你工作