[mysql] 3mal sortieren

Sway

Erfahrenes Mitglied
Ich hab da mal "wieder" ein kleines Problem.

Ich hab eine art TerminPlaner gebaut, kenne mich aber noch nicht so gut in PHP aus, um mit den evtl. vorhandenen Fuktionen umzugehen. Daher hab ich mir überlegt, mach doch einfach 3 Spalten in der Tabelle (Tag/Monat/jahr) und lässt dir die Daten ausgeben, die noch nicht adbgelaufen sind.


Aber um das nachher richtig anzeigen zu lassen, muss ich das ganze "ORDER BY blabla ASC" machen. Ich will erst die Spalte Jahr, dann Monat und zum Schluss Tag sortieren lassen.

Ist das überhaupt möglich? Oder kann MySQL auch ein Datumsformat (wie z.B.)04.06.2003 richtig sortieren?
 
Hallo Sway,

Meines Wissens nach speichert MySQL Datumswerte intern als Timestamps ab (also als Sekundenwerte). Auf jeden Fall kann MySQL aber Datumswerte richtig sortieren.

Je nach Einstellung kann es aber sein das MySQL ein anderes Datumsformat als das deutsche möchte (z.B. YYYY-MM-DD). Bei Abfrageergebnissen kannst Du das mit entsprechenden Funktionen ins deutsche Format ändern.
Ich muss mich aber noch mal schlau machen wie das genau geht, ist schon eine Weile her. ;)

Grüße Thomas
 
wenn ich das als Timestamp speicher muss ich das ja erst in in Sec umrechnen lassen...
das ist sehr kompliziert find ich. Daher würde ich das gerne in dem Format speichern (04.06.2003) und das nach ASC sortieren oder die 3 Spalten zusätlich halt.

Für letzteren kommt wieder die Frage auf, kann ich 3 sachen nacheinander sortieren?
 
also mysql kann nach datum sotieren ,
allerdings benutzt mysql intern das Ami Format YYYY-MM-DD (was nach meiner Meinung nix macht)

aber man kann auch mit drei Werten sortieren
.... order by felda, feldb, feldc
.... order by felda desc, feldb asc, feldc

ohne Angabe sort nach asc ..
 
Hallo Sway,

um das Umrechnen in Sekunden brauchst du dich nicht zu kümmern, das erledigt MySQL für dich. Es ging dabei nur um die interne Speicherung der Daten.

Ich habe mal ein kleines Szenario runtergeschrieben:

1. Zuerst brauchst du eine Tabelle (Ich denke die hast du schon), das Datum wird als DATE festgelegt, wichtig auch der Index, wenn du später danach sortieren möchtest:
Code:
CREATE TABLE termine (
  id UNSIGNED INT NOT NULL AUTO_INCREMENT,
  termin VARCHAR(50) NOT NULL,
  datum DATE NOT NULL,
  PRIMARY KEY (id),
  INDEX (datum)
);

2. Damit MySQL einen deutschen Datumswert ausgibt, musst du die Spalte mit der Funktion DATE_FORMAT aufrufen:
Code:
SELECT termin, DATE_FORMAT(datum, '%d.%m.%Y')
  FROM termine
  WHERE ...
  ORDER BY datum

Für das Einfügen eines deutschen Datumswertes ist mir keine Funktion bekannt. Wenn du die Möglichkeit hast un kein andere Grund dagegen spricht, ist es das beste wenn du das Datumsformat von MySQL generell auf das deutsche stellst, dann kannst du dir auch die Funktion unter 2. ersparen.

Grüße Thomas
 
Ich kann ein datum (wie 04.06.2003) an mysql geben und der rechnet es um? Sorry für die evtl blöde frage, aber ich kenn mich da nicht aus
 
Hallo Sway,

du kannst auf jeden Fall ein Datum in Form von '2003-12-31' an die Datenbank übergeben.

Ich schätze, dass man das Datumsformat aber auch ändern kann. Die Konfiguration von MySQL ist aber nicht mein Wissensgebiet. Vielleicht weiß da jemand anders noch drüber Bescheid.


Grüße Thomas
 
wenn das '2003-12-31' geht, hab ich meine sorgen schon los ;)

Das kann ich ja mit explode teilen und wieder so zusammensetzten, wie ich will ;)
 

Neue Beiträge

Zurück