2010-04-18 7 views
4

메신저 결과를 현재 날짜에서 오름차순이상한 주문 mysql 결과가 필요합니다

지금 사용하고 있습니다.

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

아이디어가 있으십니까? 현재 날짜를 기준으로

예를 순서는, 현재 날짜에서 시작되고, 대신 1월에서 목록을 시작하는 것입니다 월

내가 필요

에서 시작 생일을 정렬합니다.

그래서 대신;

January 
February 
March 
April 
May 
June 
July 
August 
September 
November 
December 

이렇게 주문합니다. 경우 (DATE_FORMAT (날짜, '%의 m % d에') 이제 < DATE_FORMAT (() '%의 m % d에')), 1,0) DATE_FORMAT (날짜 별 순서 등

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'); 

첫째, 순서를 날짜 오름차순 월, 일을하여 현재 다음 날짜 순서 미만 여부에 의해.

참고 이 코드는 Shrapnel이 언급 한 방법과 같습니다.

1

것을 ' %의 m % 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 | 
+----+------------+------+