跳到正文
测试源码分享
返回文章列表

MYSQL获取用户连续签到天数

803 次阅读约 1 分钟读完

表结构:data date,uid string

sql
SELECT
    count( 1 )
FROM
    (
    SELECT
        date_sub( a.data, INTERVAL 1 DAY ) signDate,
        ( @i := DATE_ADD( @i, INTERVAL - 1 DAY ) ) today
    FROM
        ( SELECT data FROM user_dakas WHERE uid = "1" ORDER BY data DESC ) a
        INNER JOIN (
        SELECT
            @i := max( data ) AS signMax
        FROM
            user_dakas
        WHERE
            uid = "1"
            AND ( TO_DAYS( data ) = TO_DAYS( curdate()) OR TO_DAYS( data ) = TO_DAYS( DATE_ADD( curdate(), INTERVAL - 1 DAY ) ) )
        ) b
    WHERE
        b.signMax IS NOT NULL
        AND TO_DAYS(
        DATE_ADD( @i, INTERVAL - 1 DAY )) = TO_DAYS( date_sub( a.data, INTERVAL 1 DAY ) )
    ) c