【发布时间】:2015-09-03 19:10:51
【问题描述】:
在尝试计算单个球员的最长连续进球数时,我遇到了一个绊脚石,>= PHP 运算符没有按预期执行。
数据以表格形式呈现如下:
日期 gls ---------------------- 1980-08-16 2 1980-08-19 1 1980-08-23 1 1980-08-26 0 1980-08-30 1 1980-09-06 2 1980-09-13 0 ... 等等我使用的 PHP 查询如下:
SELECT gls, MIN(date) as StartDate, MAX(date) as EndDate, COUNT(*) as Games
FROM (SELECT gls, date,
(SELECT COUNT(*)
FROM goalsengine G
WHERE G.gls <> GE.gls
AND G.date <= GE.date) as RunGroup
FROM goalsengine GE) A
WHERE gls>='1'
GROUP BY gls, RunGroup
ORDER BY Games
我以这种方式形成查询,相信>= 会统计该球员在一场比赛中打进一个或多个进球的连胜纪录。例如,从上表中,前三个条目代表三场比赛的得分。
相反,查询返回的是连续得分,但仅在得分达到一定数量的情况下,即尽管在前三场比赛中得分,但在返回连续得分时忽略第一个条目(得分为两球,而不是一球)。
要返回结果,我使用以下内容:
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;
}
相比之下,WHERE gls='0' 给了我想要的非进球记录。我觉得我可能忽略了一些简单的东西,但看不到什么。
【问题讨论】:
-
只是一个建议,但您是否考虑过在 GROUP BY 之后使用 HAVING 来过滤您的“gls”。类似
GROUP BY gls, RunGroup HAVING gls >= 1 ORDER BY Games -
你问的 PHP 代码在哪里?
-
我没有考虑过@MaggsWeb,但它对输出没有影响。
-
@Barmar,如果这就是你所指的,我已经用更多细节修改了这个问题?
-
我猜最后一行应该是 1980-09-13 而不是 1980-08-13,所以日期在不断增长