mysql 循环增加天数_从MySQL数据库中选择最长的连续天数?

首先,我在google和stackoverflow上都发现了很多类似的问题,但我似乎无法理解如何正确地做到这一点。

我有一张像这样的桌子:

id ms_date

------------------

1 2018-11-18

2 2018-11-18

3 2018-11-20

4 2018-11-22

5 2018-11-25

6 2018-11-26

7 2018-11-26

8 2018-11-27

9 2018-11-28

10 2018-11-29

我要做的是取得最长的连胜纪录

Days

从那张桌子上。

所以在上面的例子中,最长的连胜是

4 days

.

它解释了他在做什么,这与我正在努力实现的目标相似,但是它被如此糟糕的解释/书写,以至于我无法理解它。

我还需要找出这些日期之间的差距,然后重新开始计算连续记录。所以在上面的例子中,因为日期之间有一个间隙,

Current Streak

应该是

3 Days

.

我试过使用上面链接中的代码,但这是基于SQL的,而且还有一些奇怪的地方

WITH

代码中根本没有意义的单词。

有没有一种简单的方法可以通过php和mysql实现这一点?

有人能就这个问题提出建议吗?

事先谢谢。

编辑:

我在phpmyadmin中似乎找不到软件版本,但在数据库服务器部分可以看到:

Server: Localhost via UNIX socket

Server type: MariaDB

Server connection: SSL is not being used Documentation

Server version: 10.0.37-MariaDB-0+deb8u1 - (Debian)

Protocol version: 10

User: freemind@localhost

Server charset: UTF-8 Unicode (utf8)

第二次编辑:

基于以下答案尝试了以下操作,但我一无所获:

$sql_COUNT = "SELECT COUNT(*) max_streak

FROM

( SELECT x.*

, CASE WHEN @prev = val - 1 THEN @i:=@i ELSE @i:=@i+1 END i

, @prev:=val

FROM

( SELECT DISTINCT ms_date FROM MY_TABLE ) x

JOIN

( SELECT @prev:=null,@i:=0 ) vars

ORDER

BY ms_date

) a

GROUP

BY i

ORDER

BY max_streak DESC LIMIT 1";

$query_COUNT = mysqli_query($db_conx, $sql_COUNT);

$productCount_COUNT = mysqli_num_rows($query_COUNT); // count the output amount

echo $productCount_COUNT;

第三编辑:

以下代码echo

1

在我的页面上,但基于我在MySQL数据库中的内容,它应该回响

4

:

$sql_COUNT = "SELECT COUNT(*) AS max_streak

FROM

( SELECT x.*

, CASE WHEN @prev = ms_date - 1 THEN @i:=@i ELSE @i:=@i+1 END i

, @prev:=ms_date

FROM

( SELECT DISTINCT ms_date FROM MY_TABLE ) x

JOIN

( SELECT @prev:=null,@i:=0 ) vars

ORDER

BY ms_date

) a

GROUP

BY i

ORDER

BY max_streak DESC LIMIT 1";

$query_COUNT = mysqli_query($db_conx, $sql_COUNT);

$productCount_COUNT = mysqli_num_rows($query_COUNT); // count the output amount

echo $productCount_COUNT;

第四编辑:

我不确定下面的答案是否经过测试,但它对我不起作用。

我尝试了以下方法,尽管没有错误,但我只看到一个空白页,这意味着代码不起作用:

$sql_COUNT = "SELECT COUNT(*) max_streak

FROM

( SELECT x.*

, CASE WHEN @prev = ms_date - INTERVAL 1 DAY THEN @i:=@i ELSE @i:=@i+1 END i

, @prev:=ms_date

FROM

( SELECT DISTINCT ms_date FROM MY_TABLE ORDER BY ms_date ) x

JOIN

( SELECT @prev:=null,@i:=0 ) vars

) a

GROUP

BY i

ORDER

BY max_streak DESC";

$query_COUNT = mysqli_query($db_conx, $sql_COUNT);

$count = mysqli_fetch_array($query_COUNT);

echo $count[0];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值