Я пытаюсь заказать результаты 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