我有一张包含用户和出生日期的表格。
我想每天向用户展示最多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日):
如何限制不同的总天数(以便不从数据库收到15 sep和07 jan)?
答案 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