2010-04-18 4 views
4

Im пытается заказать результаты ASCENDING с текущей датыМне нужны необычные заказы mysql

вот что я использую сейчас;

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) 
+0

Почему вы отформатируете его? почему не просто «ORDER BY date»? –

+0

год не полезен в моем конкретном случае, это дни рождения, поэтому год не имеет значения – mrpatg

+0

хорошо, это должно сработать. что такое формат поля даты? –

ответ

2

Вы можете попробовать:

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

во-первых, порядок, является ли дата меньше текущей даты, то порядка по месяцу и дате в порядке возрастания.

ПРИМЕЧАНИЕ Это похоже на метод, о котором говорил полковник Шрапнель.

1

что-то вроде порядке, если (date_format (дата, '% м% D') < date_format (теперь(), '% м% d')), 1,0), date_format (дата,» % м% d ')

1

вы можете попробовать:

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

- возможно, не работает, поскольку тип столбца, вероятно, еще датирован. – dar7yl

4

Вот как я это сделать:

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 | 
+----+------------+------+