2014-07-04 16 views
6

Ich habe mehrere Werte in meiner Datenbank als DATETIME Datentyp (JJJJ-MM-TT HH: MM: SS), und ich habe versucht, sie in einem absteigenden zu bekommen Bestellung - Größte zu wenigsten (im Falle von Daten - Neuesten zu ältesten), obwohl, seltsam genug, scheint es, die Existenz des Betreibers vollständig zu ignorieren, die DESC.SQL - ORDER BY 'datetime' DESC

Die SQL-Abfrage (abgekürzt):

SELECT post_datetime FROM post WHERE type=`published` ORDER BY post_datetime DESC LIMIT 3 

Und davon, dass sie in dieser Reihenfolge drucken:

2014-04-30 11:55:11 
2014-07-01 12:25:40 
2014-07-02 12:28:03 

(Diejenigen, passieren die "ältesten" Datumsangaben in der Datenbank als zu)

Lösung? Ich werde feststellen, dass die Verwendung von DESC für andere Dinge (wie normale Zahlen) auch nicht funktioniert. Ich habe meine Syntax überprüft, versuchte Zitate, keine Zitate, doppelte Anführungszeichen & wie.

(Hinweis - ich werde nicht in der Lage sein, mehrere Stunden weitere Fragen zu beantworten, obwohl ich mein Bestes tun, um zu reagieren, wenn ich zurückkehre)


(6/11/17)

bearbeiten: um zu klären, für zukünftige Leser wurde die Syntax Tippfehler auf die Frage nicht verwandt und war auf dem Teil einen Fehler, wenn ein Beispiel eingeben. Ich hatte so lange einen selbst erstellten Abfrage-Generator benutzt, dass ich die korrekte Syntax zu der Zeit vergessen hatte. Das Problem lag in der Logik meines Programms - nicht in der Abfrage. Das obige Beispiel wurde bearbeitet und ist korrekte Lösung für jeden, der die genannte Aufgabe ausführen möchte. Es tut mir leid, dass dies über 50k mal angesehen wurde ... aber jetzt weißt du es.

+0

Diese Abfrage sollte mindestens einen Syntaxfehler werfen (angesichts der Verwendung von '=' nach 'ORDER BY' und' LIMIT'), und ein Fehler beschwert, dass es keine Spalte mit dem Namen 'post_datetime finden konnte DESC''. Sie sollten zuerst versucht haben, solche Fehler zu bearbeiten. –

Antwort

1

Versuchen:

SELECT post_datetime 
FROM post 
WHERE type = 'published' 
ORDER BY post_datetime DESC 
LIMIT 3 
1

die Anführungszeichen entfernen hier:

ist:

ORDER BY = 'post_datetime DESC' AND LIMIT = '3' 

werden sollten:

ORDER BY post_datetime DESC LIMIT 3 
12
  1. Verwendung singen le zitiert für Streicher
  2. keine einfache Anführungszeichen um Tabellennamen setzen (Verwendung `statt)
  3. keine einfache Anführungszeichen um Zahlen setzen (Sie können, aber es ist schwieriger zu lesen)
  4. nicht setzen AND zwischen ORDER BY und LIMIT
  5. NICHT setzen = zwischen ORDER BY, LIMIT Keywords und Zustand

Sie werden also Abfrage wie folgt aussehen:

SELECT post_datetime 
FROM post 
WHERE type = 'published' 
ORDER BY post_datetime DESC 
LIMIT 3