Ben alışılmadık sipariş mysql sonuçları gerekir

4 Cevap php

Im geçerli tarihten sonuçları, artan düzende çalışıyor

Bu şimdi kullanıyorum ne im;

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

herhangi bir fikir?

example ordering by date now, sorts the birthdays starting at january

ne gerek, yerine Ocak listeyi başlayan, geçerli tarihten itibaren başlıyor edilir.

Yani, yerine;

January
February
March
April
May
June
July
August
September
November
December

Bu gibi onları sipariş edecek;

April (current month/day)
May
June
July
August
September
November
December
January
February
March
April (all the way up to yesterday)

4 Cevap

Eğer deneyebilirsiniz:

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

Öncelikle, tarihi geçerli tarih daha az olup olmadığını tarafindan, daha sonra artan sırayla aya ve tarihe göre sipariş.

NOTE This looks like the method Col. Shrapnel was referring to.

İşte ben bunu istiyorum nasıl:

SELECT *, (DATE_FORMAT(date, '%j')-DATE_FORMAT(NOW(), '%j')+365)%365 AS d 
FROM foo ORDER BY d;

%j tarih formatı sayısı 001 ... 366, yani yılın günüdür.

Ben bazı örnek veriler üzerinde bu test ve bunu tarif şekilde sıralar: O artan ve önceki yıl tarihlerini sarılıp sonra, yıl sayar ve birinci geçerli tarihten sonra düşer sonraki tarihini sıralar.

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

bir şey tarafından sipariş gibi if (DATE_FORMAT (tarih, '% m% d')

Eğer deneyebilirsiniz:

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