代码之家  ›  专栏  ›  技术社区  ›  mrpatg

我需要不寻常的mysql结果排序

  •  4
  • mrpatg  · 技术社区  · 16 年前

    我试图从当前日期开始按升序排列结果

    这就是我现在使用的;

    SELECT * FROM friends JOIN bdays 
    ON bdays.user = friends.friendname 
    WHERE username = $userid ORDER BY DATE_FORMAT(date, '%m %d')
    

    有什么想法吗?

    例子 现在按日期排序,从一月开始排序生日

    我需要的不是从一月份开始,而是从现在开始。

    所以,不是;

    January
    February
    March
    April
    May
    June
    July
    August
    September
    November
    December
    

    它会这样命令他们;

    April (current month/day)
    May
    June
    July
    August
    September
    November
    December
    January
    February
    March
    April (all the way up to yesterday)
    
    4 回复  |  直到 16 年前
        1
  •  2
  •   cmptrgeekken    16 年前

    你可以试试:

    ORDER BY
       DATE_FORMAT(date,'%m %d') < DATE_FORMAT(NOW(),"%m %d"),
       DATE_FORMAT(date,'%m %d');
    

    首先,按日期是否小于当前日期排序,然后按月份和日期升序排序。

    注释 这看起来像是炮弹上校所指的方法。

        2
  •  4
  •   Bill Karwin    16 年前

    我会这样做:

    SELECT *, (DATE_FORMAT(date, '%j')-DATE_FORMAT(NOW(), '%j')+365)%365 AS d 
    FROM foo ORDER BY d;
    

    这个 %j 日期格式是一年中的某一天,即001…366号。

    我在一些示例数据上测试了这个方法,它按照您描述的方式进行排序:它忽略年份,并首先对当前日期之后的下一个日期进行排序,然后升序,并环绕到一年中较早的日期。

    +----+------------+------+
    | id | date       | d    |
    +----+------------+------+
    |  5 | 1999-05-15 |   27 |
    |  6 | 1992-06-15 |   59 |
    |  7 | 1990-07-15 |   88 |
    |  8 | 1988-08-15 |  120 |
    |  9 | 1980-11-15 |  212 |
    |  1 | 2010-01-15 |  272 |
    |  2 | 2009-02-15 |  303 |
    |  3 | 2004-03-15 |  332 |
    |  4 | 2002-04-15 |  362 |
    +----+------------+------+
    
        3
  •  1
  •   Your Common Sense    16 年前

    类似于order by if(日期格式(日期,'%m%d')<日期格式(now(),'%m%d'),1,0),日期格式(日期,'%m%d')

        4
  •  1
  •   dar7yl    16 年前

    你可以尝试:

    SELECT *, DATE_FORMAT(date, '%m %d') as adate FROM friends JOIN bdays 
    ON bdays.user = friends.friendname 
    WHERE username = $userid 
    ORDER BY adate
    
    推荐文章