PHP/SQL - 如果 foreach() 中的 ID 相同,则将值相加

Posted

技术标签:

【中文标题】PHP/SQL - 如果 foreach() 中的 ID 相同,则将值相加【英文标题】:PHP/SQL - Add values together if ID is the same in foreach() 【发布时间】:2014-04-03 13:45:07 【问题描述】:

我正在尝试显示球员得分的统计数据,但是有时同一球员会以相同的 playerID 添加到数据库中,当球员被添加两次时,我如何将这些值相加以显示为总数,而不是重复播放器两次。

db结构示例:

playerID | Goals | Season | leagueID
   1         5       1        1
   2         1       1        1
   1         2       1        2
   5         3       1        1
   1         3       2        2
   2         2       2        1

php:

$query = $db->query('SELECT * FROM playerstats ORDER BY goals DESC LIMIT 30');
$num = $query->num_rows;
if($num > 0) 

foreach($query as $row) 
$playerID = $row['playerID'];
$goals = $row['goals'];

echo '
<tr>
<td>'.$playerID.'</td>
<td>'.$goals.'</td>
</tr>

';




这将分别显示 playerID 1、3 次。 如何让它只显示一次 playerID 1 并将所有目标加在一起 ​​(10)

我尝试将查询更改为:SELECT DISTINCT * FROM playerstats ORDER BY goal DESC LIMIT 30 但这没有任何区别。

【问题讨论】:

【参考方案1】:

Group BY 将帮助您:

<?php
$query = $db->query('SELECT SUM(p.goals) as total_goals, 
p.playerID, p.leagueID, p.Season 
FROM playerstats as p 
GROUP BY p.playerID, p.leagueID, p.Season
ORDER BY total_goals DESC LIMIT 30');

$num = $query->num_rows;
if($num > 0) 
foreach($query as $row)         
   echo '
    <tr>
    <td>'.$row['playerID'].'</td>
    <td>'.$row['total_goals'].'</td>
    </tr>

    ';

  

请注意,我的查询也将按赛季和联赛分组,如果您想要通过赛季和联赛的总进球数,您的 group by 将是: GROUP BY p.playerID

【讨论】:

【参考方案2】:

如果您只需要playerIDgoals 的总和,而不管SeasonleagueID,请将您的查询更改为:

SELECT DISTINCT playerID AS player, (SELECT SUM(goals) FROM playerstats WHERE playerID = player) AS totalGoals FROM playerstats

【讨论】:

【参考方案3】:

您可以将结果分组到数组中,然后循环遍历它。或在 SQL 级别排序。 这样的事情可能会起作用:

    $playerStats = array();

    foreach($query as $row)
        
        if(array_key_exists($row['playerID'], $playerStats))
            $playerStats[$row['playerID']] += $row['goals'];
        else
            $playerStats[$row['playerID']] = $row['goals'];
    

    // Then loop over playerStats

    foreach($playerStats as $playerID => $playerGoals)
    
        echo $playerID;
        echo $playerGoals;
    

【讨论】:

以上是关于PHP/SQL - 如果 foreach() 中的 ID 相同,则将值相加的主要内容,如果未能解决你的问题,请参考以下文章

PHP SQL SELECT sum(value) WHERE x LIKE '%$month%' (foreach)

如果 Razor 视图中的 foreach 无法识别条件

foreach 循环中的实体验证,如果验证失败,则在下一个循环中保持失败

forEach 在 nslaoyutconstraints 中的使用

$Files 中的 PowerShell ForEach $file

foreach 循环不会遍历列表中的所有项目 - C#