PHP比较运算符在MySQL条纹查询中不起作用

Posted

技术标签:

【中文标题】PHP比较运算符在MySQL条纹查询中不起作用【英文标题】:PHP comparison operator not working in MySQL streak query 【发布时间】: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

我以这种方式形成查询,相信&gt;= 会统计该球员在一场比赛中打进一个或多个进球的连胜纪录。例如,从上表中,前三个条目代表三场比赛的得分。

相反,查询返回的是连续得分,但仅在得分达到一定数量的情况下,即尽管在前三场比赛中得分,但在返回连续得分时忽略第一个条目(得分为两球,而不是一球)。

要返回结果,我使用以下内容:

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 &gt;= 1 ORDER BY Games 你问的 PHP 代码在哪里? 我没有考虑过@MaggsWeb,但它对输出没有影响。 @Barmar,如果这就是你所指的,我已经用更多细节修改了这个问题? 我猜最后一行应该是 1980-09-13 而不是 1980-08-13,所以日期在不断增长 【参考方案1】:

我已经设法为这个特定问题制定了一个解决方案,并且据我所知,它可以手动计算出一些原始数据。

SELECT gls, MIN(date) as StartDate, MAX(date) as EndDate, COUNT(*) as Games 
FROM (SELECT gls, date, 
        (SELECT COUNT(*) 
            FROM goalsengine G  
            WHERE IF(G.gls IN ('1','2','3','4','5'),1,0) <> IF(GE.gls IN ('1','2','3','4','5'),1,0)
    AND G.date <= GE.date) as RunGroup
    FROM goalsengine GE) A 
WHERE gls IN ('1','2','3','4','5') GROUP BY IF(bg IN ('1','2','3','4','5'),1,0), RunGroup ORDER BY Games DESC LIMIT 3");

我承认它并不完全漂亮,但它现在正在做这项工作。我在计算中选择了 5,因为这是就该数据集而言,单场比赛的最大进球数。

【讨论】:

以上是关于PHP比较运算符在MySQL条纹查询中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

OR运算符在mysql php中不起作用[重复]

查询在 Mysql 数据库中不起作用

MySQL的更新命令在PHP中不起作用

mysql:内部查询在 selectif 语句中不起作用

更新查询在 mysql 工作台中不起作用

比较 Mongoose 对象 ID 时,if 语句在 Jade 中不起作用