MYSQL/PHP计算出现次数
首先,我有点困惑,对于下面的问题,最好的实现是什么,也就是说,在不改变表的情况下,只使用mysql是不是可以做到,或者我是否需要像目前这样使用PHP和mysql的组合。 请在阅读以下内容时牢记这一点: 问题信息 Pickem游戏的工作原理如下: 1-在一轮比赛中显示所有比赛/固定装置 2-用户输入他认为将赢得每场比赛的球队 从表MYSQL/PHP计算出现次数,php,mysql,Php,Mysql,首先,我有点困惑,对于下面的问题,最好的实现是什么,也就是说,在不改变表的情况下,只使用mysql是不是可以做到,或者我是否需要像目前这样使用PHP和mysql的组合。 请在阅读以下内容时牢记这一点: 问题信息 Pickem游戏的工作原理如下: 1-在一轮比赛中显示所有比赛/固定装置 2-用户输入他认为将赢得每场比赛的球队 从表计划中提取夹具,并将用户结果记录在表拾取 记住 每轮可以有多场比赛(1到30+场) 我想做什么/遇到什么问题 我试图计算有多少用户选择team1赢得比赛,以及有多少用户选
计划中提取夹具
,并将用户结果记录在表拾取
记住
每轮可以有多场比赛(1到30+场)
我想做什么/遇到什么问题
我试图计算有多少用户选择team1
赢得比赛,以及有多少用户选择team2
赢得比赛
示例
曼联:7名用户被选中
阿森纳3:用户选择
MYSQL表
赛程表即将举行的奥运会赛程
选择表用户选择记录在此表中
计算后上述表格的预期输出
因此,对于超级橄榄球赛第1轮,应如下所示:
4个拾取记录,2个用户选择Jaquares 1个用户选择Stormers(忽略从现在开始的抽取)gameID 1
4次拾取记录,4个用户选择鲨鱼,0个用户选择狮子gameID 2
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还是每个队