Мне нужны необычные результаты заказа MySQL - PullRequest
4 голосов
/ 18 апреля 2010

Я пытаюсь заказать результаты по возрастанию с текущей даты

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

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 ]

4 голосов
/ 18 апреля 2010

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

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 |
+----+------------+------+
2 голосов
/ 18 апреля 2010

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

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

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

Примечание Это похоже на метод, на который ссылался полковник Шрапнель.

1 голос
/ 18 апреля 2010

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

SELECT *, DATE_FORMAT(date, '%m %d') as adate FROM friends JOIN bdays 
ON bdays.user = friends.friendname 
WHERE username = $userid 
ORDER BY adate
1 голос
/ 18 апреля 2010

что-то вроде порядка по if (date_format (date, '% m% d')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...