it-swarm.com.de

Kategorie-Blog-Bestellung funktioniert nicht

Ich hatte eine Frage zur Reihenfolge der Blog-Layouts, ich habe viele Artikel vom November, aber zuletzt habe ich ab August viele Artikel über eine API hinzugefügt. Der Import war alles gut und nichts war falsch daran, aber als ich mein Blog-Layout auf "Neueste zuerst" stellte, dauerte es den letzten November und August und sortierte sie

Ich bekomme:

30. November 30. August 23. November 22. August

Aber ich möchte bekommen:

30. November 23. November 30. August 22. August

Weiß jemand, wie ich das bekomme?

2
Brum

Ich kann nicht zu genau sein, ohne die genaue Struktur und Daten der Datenbanktabelle zu kennen, aber es scheint, dass Ihre date Werte gespeichert und verarbeitet werden als:

dd _[delimiter]_ mm _[delimiter]_ yyyy (Begrenzer können logischerweise _/_ oder _-_ sein)

Wenn Sie beispielsweise das Datum als VARCHAR speichern und die Zeichenfolge wie folgt aussieht: _22/08/17_, _30/08/17_, _23/11/17_, _30/11/17_, dann ist es einfach Um zu sehen, dass MySQL Ihre Zeilen sortiert, lesen Sie die Datumsangaben als "Zeichenfolgen" (von links nach rechts) im Vergleich zu "Datumsangaben" (y, m, dann d Logik).

Es gibt viele Möglichkeiten, dieses Problem zu lösen, aber der beste Rat, den ich geben kann, ist, die gespeicherten Daten zu korrigieren (da Datumswerte als gespeichert werden sollten Datumstyp) und passen Sie die Codes an, die darauf zugreifen. Dies würde bedeuten, die Spalte date auf den Typ DATE zu setzen und Werte im Format _yyyy-mm-dd_ einzugeben. Die Bestellung wird dann dauerhaft vereinfacht, aber Sie müssen die Datumswerte in der SELECT -Klausel an Ihr gewünschtes Format anpassen.

Wenn Sie die Datenspeicherung nicht korrigieren können oder möchten, können Sie das Problem mit einem Verband behandeln, indem Sie alle Abfragen ändern, die nach Datum sortiert werden müssen.

Wenn Ihre Datumsspalte date heißt und Ihre Werte _/_ als Trennzeichen verwenden, können Sie diese _ORDER BY_ -Klausel verwenden, um nach Jahr, Monat und Tag vom neuesten zum ältesten zu sortieren :

_ORDER BY STR_TO_DATE(`date`, '%d/%m/%Y') DESC
_

Hier ist eine SQL-Geige, um zu demonstrieren, was passiert mit dem Aufruf STR_TO_DATE().

1
mickmackusa