Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL/PHP计算出现次数_Php_Mysql - Fatal编程技术网

MYSQL/PHP计算出现次数

MYSQL/PHP计算出现次数,php,mysql,Php,Mysql,首先,我有点困惑,对于下面的问题,最好的实现是什么,也就是说,在不改变表的情况下,只使用mysql是不是可以做到,或者我是否需要像目前这样使用PHP和mysql的组合。 请在阅读以下内容时牢记这一点: 问题信息 Pickem游戏的工作原理如下: 1-在一轮比赛中显示所有比赛/固定装置 2-用户输入他认为将赢得每场比赛的球队 从表计划中提取夹具,并将用户结果记录在表拾取 记住 每轮可以有多场比赛(1到30+场) 我想做什么/遇到什么问题 我试图计算有多少用户选择team1赢得比赛,以及有多少用户选

首先,我有点困惑,对于下面的问题,最好的实现是什么,也就是说,在不改变表的情况下,只使用mysql是不是可以做到,或者我是否需要像目前这样使用PHP和mysql的组合。 请在阅读以下内容时牢记这一点:

问题信息

Pickem游戏的工作原理如下:

1-在一轮比赛中显示所有比赛/固定装置

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

从表
计划中提取夹具
,并将用户结果记录在表
拾取

记住

每轮可以有多场比赛(1到30+场)

我想做什么/遇到什么问题

我试图计算有多少用户选择
team1
赢得比赛,以及有多少用户选择
team2
赢得比赛

示例

曼联:7名用户被选中 阿森纳3:用户选择

MYSQL表

赛程表即将举行的奥运会赛程

选择表用户选择记录在此表中

计算后上述表格的预期输出

因此,对于超级橄榄球赛第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;
}
test.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'];
    }
$picks=calcStats(‘超级橄榄球’、‘1’);
foreach($picks as$index=>$pick){
如果($pick['gameID']!==$newGameID){
?>

似乎你在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,
    ],
    ...

编辑您的问题并添加表定义和SQL以使用示例数据填充表。@ryantxr问题编辑问题标题是什么意思?请参阅“0个用户”->在输出中显示这一点很重要,还是只显示选择就足够了?Hi@Ja͢ck我将以百分比的形式显示/转换这些值——因此我想这有点重要,但0个用户选择团队的可能性非常小。我也可以简单地添加一个条件,确保至少有1个选择f还是每个队