脚本宝典收集整理的这篇文章主要介绍了php – 如何使用MySQL和两个’where’子句计算最长条纹,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我修改了我的数据表,添加了一个“场地”栏,以显示游戏是“回家”还是“离开”:
date result venue ----------------------------- 1980-08-16 W H 1980-08-19 L A 1980-08-23 W A 1980-08-26 W H 1980-08-30 D H and so on...
由于我之前的问题,我已成功计算出最长的整体条纹,但现在我想根据场地来计算这些条纹并且我不确定如何去做.
例如,对于大多数家庭连续的主场胜利,我尝试了以下查询 – 但结果“运行”的返回时间比实际更短(基于数据的手动计数),并且没有明显的中断:
sql:
SELECT result,venue,MIN(date) as StartDate,MAX(date) as EndDate,COUNT(*) as Games From ( SELECT result,date,( SELECT COUNT(*) From resultengine R WHERE R.result <> RE.result AND (R.venue = 'H') <> (RE.venue = 'H') AND R.date <= RE.date ) as RunGroup FROM resultengine RE ) A WHERE venue = 'H' AND result='W' group by result,RunGroup ORDER BY Games
PHP:
$result = MysqL_query( /* the sql statement from above */ ); while($row=MysqL_fetch_assoc($result)) { $startrundate = date("d F Y",strtotime($row['StartDate'])); $endrundate = date("d F Y",strtotime($row['EndDate'])); echo "<tr>"; echo "<td>".$row['Games']."</td>"; echo "<td class='tablePRofile' style='text-align:right;'>".$startrundate." - ".$endrundate."</td>"; echo "</tr>"; $rowcount += 1; }
事实证明这比我想象的要困难,但同样不相信我离解决方案太远了.它只是弥合了我所拥有的和我目前没有做的事情之间的差距.
UPDATE
我似乎已经解决了这个特殊问题.它就像更改子句(R.venue =’H’)<>一样简单(RE.venue =’H’)到R.venue = RE.venue
$currentStreak = 0; $longestString = 0; foreach($games as $game) { if(!$game->wasWon()) { $currentStreak = 0; continue; } $currentStreak++; if($currentStreak > $longestStreak) { $longestStreak = $currentStreak; } }
如果你想扩展逻辑只关心主游戏,你可以包装整个逻辑:
foreach($games as $game) { if($game->wasHomeGame()) { if(!$game->wasWon()) { $currentStreak = 0; continue; } $currentStreak++; if($currentStreak > $longestStreak) { $longestStreak = $currentStreak; } } }
这样可以更好地放置在具有更大灵活性的类中,例如,您可以使用值类来说明播放的位置:
public function getLongestStreak(array $games,Venue $venue) { $currentStreak = 0; $longestString = 0; foreach($games as $game) { if($game instanceof Game && $game->was@R_304_2266@edAt($venue)) { if(!$game->wasWon()) { $currentStreak = 0; continue; } $currentStreak++; if($currentStreak > $longestStreak) { $longestStreak = $currentStreak; } } } return $longestStreak; }
以上是脚本宝典为你收集整理的php – 如何使用MySQL和两个’where’子句计算最长条纹全部内容,希望文章能够帮你解决php – 如何使用MySQL和两个’where’子句计算最长条纹所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。