Intereting Posts

Мне нужны необычные заказы mysql

Я пытаюсь заказать результаты ASCENDING с текущей даты

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

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) 

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

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

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

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

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

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

что-то вроде order by if (date_format (date, '% m% d') <date_format (now (), '% m% d')), 1,0), date_format (дата,% m% d)

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

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