限制不同日期的行

时间:2016-01-08 13:22:13

标签: mysql

我有一张包含用户和出生日期的表格。

我想每天向用户展示最多4天。

我有什么:

SELECT *, DATE_FORMAT( `user_birthdate`, '%m-%d') as `user_birthday`
FROM `users`
WHERE `user_birthdate` IS NOT NULL 
ORDER BY CASE
    WHEN `user_birthday` >= DATE_FORMAT( CURRENT_TIMESTAMP , '%m-%d' ) 
    THEN `user_birthday`
    ELSE `user_birthday` < DATE_FORMAT( CURRENT_TIMESTAMP , '%m-%d' ) 
END

结果将是(今天是08月1日):

Birthdays

如何限制不同的总天数(以便不从数据库收到15 sep和07 jan)?

1 个答案:

答案 0 :(得分:1)

如果您想限制为4 而不是4行,那么您需要一些额外的工作。一种方法使用子查询。更简单的方法使用变量:

SELECT u.*
FROM (
    SELECT 
        u.*, 
        DATE_FORMAT( `user_birthdate`, '%m-%d') as `user_birthday`,
        (@rn := if(@bd = DATE_FORMAT( `user_birthdate`, '%m-%d'), @rn, if(@bd := DATE_FORMAT( `user_birthdate`, '%m-%d'), @rn + 1, @rn + 1) ) ) as run
    FROM `users` u CROSS JOIN (SELECT @bd := '', @rn := 0) params
    WHERE `user_birthdate` IS NOT NULL 
    ORDER BY (
        CASE 
            WHEN `user_birthday` >= DATE_FORMAT( CURRENT_TIMESTAMP , '%m-%d' ) 
            THEN `user_birthday`
            ELSE `user_birthday` < DATE_FORMAT( CURRENT_TIMESTAMP , '%m-%d' ) 
        END
    )
) u
WHERE run <= 4