2013-06-23 98 views
0

我有一个数据库表userinfo。在该用户信息表中有字段user_id,user_name,user_birth。MYSQL从数据库中获取即将到来的生日(UNIX时间戳)

我的目标是获得即将到来的用户生日,在我的情况下是6个下一个。我发现了同样的事物的例子,但他们都使用了DATE-dbformat,这些例子不适合我,因为在我的表中,user_birth的值是unix时间戳格式。

我将不胜感激,如果有人有一个示例代码,它将如何可能。

我曾尝试走出会是这样的(当今天是23.06),其结果是:

  • 27.06迈克
  • 11.10史蒂夫
  • 23.10约翰
  • 25.12戴夫
  • 07.01安迪
  • 12.02马克

这些将是23.06之后的6个生日,今年应该不会有问题。

在此先感谢。

回答

1

那么,请使用from_unixtimestamp()来获取日期/时间格式。因此,查询将是这样的:

select * 
from t 
order by (case when month(date(from_unixtimestamp(user_birth))) = month(now()) and 
        day(date(from_unixtimestamp(user_birth))) > day(now()) or 
        month(date(from_unixtimestamp(user_birth))) > month(now()) 
       then 1 else 0 
      end) desc, 
     month(date(from_unixtimestamp(user_birth))), 
     day(date(from_unixtimestamp(user_birth))) 
limit 6 

order by的第一部分提出的较后日期在今年第一。然后日期按月份和月份排序。

+0

谢谢你的回答/例子戈登。我已经修复了你的查询,它对我来说是正确的。 查询附带的问题是,它只给出正确的生日,直到今年年底。 因此,在我的情况下,它的工作是正确的,直到“25.12戴夫”,但在此之后,当它跳到明年排序不再工作正确。 有没有可能一些简单的方法来解决这个问题? – user2514055

+0

@ user2514055。 。 。它应该在今年年底前完成包装工作。你可以用一些数据显示问题来搭建一个SQLFiddle吗? –