首先,我有点困惑什么是以下问题的最佳实现方式,即纯粹可以仅使用 mysql 来完成而不更改表,还是我需要像我目前正在做的那样结合使用 PHP 和 mysql。 请在阅读时牢记这一点:
问题信息
Pickem 游戏的工作原理如下:
1- 显示锦标赛一轮中的所有比赛/赛程。
2- 用户输入他认为哪支球队将赢得每场比赛。
固定装置从表schedule
中提取,用户结果记录在表picks
中
牢记
每一轮可以有多个匹配项(介于 1 到 30 多个匹配项之间)
我正在尝试做什么/问题
我正在尝试计算在锦标赛的给定回合中有多少用户选择 team1
获胜,以及有多少用户选择 team2
获胜。
示例
曼联:7 个用户选择 | Arsenal 3:用户选择
MYSQL 表
计算后上表的预期输出
因此对于 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')
我觉得我的问题很有道理,如果您需要任何其他信息,请在下方评论,感谢您花时间阅读。
最佳答案
看来您在 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/