php - MYSQL/PHP 计算出现次数

标签 php mysql

首先,我有点困惑什么是以下问题的最佳实现方式,即纯粹可以仅使用 mysql 来完成而不更改表,还是我需要像我目前正在做的那样结合使用 PHP 和 mysql。 请在阅读时牢记这一点:

问题信息

Pickem 游戏的工作原理如下:

1- 显示锦标赛一轮中的所有比赛/赛程。

2- 用户输入他认为哪支球队将赢得每场比赛。

固定装置从表schedule中提取,用户结果记录在表picks

牢记

每一轮可以有多个匹配项(介于 1 到 30 多个匹配项之间)

我正在尝试做什么/问题

我正在尝试计算在锦标赛的给定回合中有多少用户选择 team1 获胜,以及有多少用户选择 team2 获胜。

示例

曼联:7 个用户选择 | Arsenal 3:用户选择

MYSQL 表

日程表即将到来的比赛日程 enter image description here

picks 表 User Picks 记录在此表中 enter image description here

计算后上表的预期输出

因此对于 Super Rugby Round 1,它应该如下所示:

  • gameID 1 记录了 4 次选秀,2 ​​位用户选择了 Jaquares 1 位用户选择了 Stormers(现在忽略抽签)
  • gameID 2 记录了 4 个选择,4 个用户选择了鲨鱼,0 个用户选择了狮子

我的代码

function calcStats($tournament, $week)
{
    global $db;
//GET ALL GAMES IN TOURNAMENT ROUND
    $sql = 'SELECT * FROMpicks
            WHERE picks.tournament = :tournament AND picks.weekNum = :weekNum ORDER BY gameID';
    $stmnt = $db->prepare($sql);
    $stmnt->bindValue(':tournament', $tournament);
    $stmnt->bindValue(':weekNum', $week);
    $stmnt->execute();
    if ($stmnt->rowCount() > 0) {
            $picks = $stmnt->fetchAll();
            return $picks;
        }
    return false;
}

测试.php

 $picks = calcStats('Super Rugby', '1');
 foreach($picks as $index=> $pick) {
            if($pick['gameID'] !== $newGameID){
                ?>
                <h1><?php echo $pick['gameID']?></h1>
                <?php
                //reset counter on new match
                $team1 = 0;
                $team2 = 0;
            }
            if($pick['picked'] === $newPick){
                //gameID is passed as arrayKey  to map array index to game ID
                //team name
                $team1[$pick['picked']];
                //number times selected
                $team1Selections[$pick['gameID']] = $team1++;
            }
            else if($pick['picked'] !== $newPick){
                ///gameID is passed as arrayKey  to map array index to game ID
                //team name
                $team2[$pick['picked']];
                $team2Selections[$pick['gameID']] = $team2++;
            }
            $newPick = $pick['picked'];
            $newGameID = $pick['gameID'];
    }

PRINT_R() 函数$picks = calcStats('Super Rugby', '1')

enter image description here

我觉得我的问题很有道理,如果您需要任何其他信息,请在下方评论,感谢您花时间阅读。

最佳答案

看来您在 PHP 中做了太多在 MySQL 中可以轻松完成的工作;考虑以下查询:

SELECT gameID, team, COUNT(*) AS number_of_picks
FROM picks
WHERE picks.tournament = :tournament AND picks.weekNum = :weekNum 
GROUP BY gameID, team
ORDER BY gameID, team

根据您的示例,这将给出以下结果:

1 | Jaquares | 2
1 | Stormers | 1
1 | Draw     | 1
2 | Sharks   | 4

然后,在 PHP 中,您对游戏进行分组:

$result = array();
foreach ($stmnt->fetchAll() as $row) {
  $result[$row['gameID']][] = $row;
}
return $result;

你的数组将包含如下内容:

[
  '1' => [
    [
      'gameID' => 1,
      'team' => 'Jaquares',
      'number_of_picks' => 2,
    ],
      'gameID' => 1,
      'team' => 'Stormers',
      'number_of_picks' => 1,
    ],
    ...

关于php - MYSQL/PHP 计算出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48604312/

相关文章:

php - 将创建日期时间戳添加到 WooCommerce 客户电子邮件

用于 openID 的 PHP 库

php - MYSQL 查询在 PHP 中使用 if else 更新或插入

php - 根据选择选项中选择的内容使用 php 显示数据

mysql - 在 MySQL 中使用文件路径作为主键

php - 否 'Access-Control-Allow-Origin' ionic PhpMyAdmin

php - PHP 会忽略/etc/group 设置吗?

php - 如何按位比较字符串

php - IE 的行为与 jQuery 更改/ajax 事件不一致

javascript - "+"js中的字符回显来自html页面的编辑数据被替换为数据库中的空白