2017-01-31 10 views
0

Ich speichere Daten in meiner Datenbank. Die Daten werden wie folgt aussehen gespeichertSortieren nach einem Monat Name

id | upload_month | created_at 
----------------------------------------- 
1 | Febuary  | 2017-01-30 13:22:39 
----------------------------------------- 
2 | January  | 2017-01-30 13:23:42 
----------------------------------------- 
3 | January  | 2017-01-30 13:25:33 

Was ich brauchte, um die einzigartige upload_months zu tun bekommen war, immer das neueste created_at Datum. Also für die oben war ich nach so etwas wie dieses

id | upload_month | created_at 
----------------------------------------- 
1 | Febuary  | 2017-01-30 13:22:39 
----------------------------------------- 
2 | January  | 2017-01-30 13:25:33 
----------------------------------------- 

Um dies zu erreichen, habe ich die folgende SQL-

SELECT * 
    FROM uploaded_file 
    JOIN (SELECT uploaded_file.upload_month, MAX(uploaded_file.created_at) created_at 
      FROM uploaded_file 
     GROUP BY uploaded_file.upload_month) months 
    ON uploaded_file.upload_month = months.upload_month 
    AND uploaded_file.created_at = months.created_at 

Nun werden die oben genannten Arbeiten gut, aber jetzt ich bin auf der Suche das Ergebnis der oben bestellen durch den Upload_Monat. Im Idealfall sollte das obige Januar zuerst und dann Februar sein.

Gibt es eine Möglichkeit, nach dem upload_month zu bestellen?

Dank

Antwort

3

Angenommen, Sie möchten die Monate in chronologischer Reihenfolge ohne Rücksicht auf das Jahr anzeigen, dann können Sie den Monat als Datum formatieren und danach sortieren.

Zum Beispiel:

order by str_to_date(concat(year(current_date()),'-', upload_month,'-01'),'%Y-%M-%d') 
1
ORDER BY CASE months.upload_month 
    WHEN 'January' THEN 1 
    WHEN 'February' THEN 2 
    -- ... You get the idea 
    WHEN 'December' THEN 12 
END 

Und zum nächsten Mal Monat als TINYINT speichern kann, um dieses Problem zu vermeiden.

+0

MySQL kennt Monatsnamen – Strawberry

+1

@Strawberry Mindestens, * Englisch * Namen. Daher empfehle ich die anderen Lösungen gepostet. –

2

können Sie Namen des Monats in Zahl konvertieren und es als verwenden, um durch so.

order by month(str_to_date(upload_month,'%M')) 
+1

Aus irgendeinem Grund funktionierte% b nicht, musste in% M geändert werden –

+0

'% b \t Name des abgekürzten Monats (Jan..Dec)' –

Verwandte Themen