Datum soll sortiert werden

Erks

Erfahrenes Mitglied
Ich habe folgende MySQL query...

PHP:
mysql_query("SELECT * FROM tshelfer_sonderkurse_salsa_stufeII WHERE `kurs-nr`!='' ORDER BY `datum` ASC")

Das Datum wird in der Tabelle als varchar(100) gespeichert (dd.mm.yyyy) und soll dann eigenlicht sortiert werden. Der Befehl sortiert aber nur nach den Zahlen dd und nicht nach dem o.g. Muster. Wieso?

Ich hab schon öfters gelesen, dass es so eine Funktion gibt namens DATE, aber ich hab nie mit der geabeitet. Wie könnte man so eine Methode einbauen?

Danke für Antworten. Bitte bei den Antworten, wo man einen Vorschlag für das Script hat, mit Beispiel Script:rolleyes:
 
Weder PHP noch MySQL geht intuitiv mit deinem Datumsformat um, von daher würde ich dir raten auf einen Unix Timestamp umzusteigen.
Mit diesem kann sowohl PHP als auch MySQL umgehen, rechnen und sortieren.
 
Hm da du es verschoben hast scheinst du deine antwort noch nicht zu kennen... schreib am besten das nächste mal eine antwort zu den sachen rein ;)

Also ich hab sowas mal gemacht gehabt das ich das sortieren kann.
Du brauchst nur eine Spalte vom typ Integer und dort das Datum einschreiben jedoch in einer bestimmten formatierung (JahrMonatTagStundenMinuten)

zum speichern kannst du dann zb
PHP:
$datum = date(ymd); //Diese var in der spalte vom char speichern die dann das datum darstellt

Zum ausgeben kannst du dann dieses benutzen
PHP:
$datumb = strval($datumb);
$datumb = chunk_split($datumb, 2, ' ');
$datumb = explode(' ',$datumb);
$datum = $datumb[2].'.'.$datumb[1].'.'.$datumb[0]; //dann steht in datum zb 14.01.08

Das geht natürlich auch mit zeit dann heisst es date(ymdHi) und du hast dann..
Jahr = $darumb[0]
Monat = $datumb[1]
Tag = $datumb[2]
Stunde = $datumb[3]
Minuten = $datumb[4]

Alles klar?... glaube zwar ist eine relativ umständliche art aber funktioniert auf jedenfall und hoffe hilft dir weiter
 
Zuletzt bearbeitet:
Das von dir gewählte Datumsformat lässt sich mit den gewöhlichen Algorithmen nicht sortieren, da die Jahreszahl an letzter, die Monatszahl an mittlerer und die Tageszahl an erster Stelle steht. Die Sortieralgorithmen sortieren jedoch von vorne nach hinten, also in deinem Fall zuerst anhand der Tageszahl, dann anhand der Monatszahl und dann anhand der Jahreszahl.
 
args SOOORRRYYYY^^ hast vollkommen recht.... das lustige ist das ich es im code richtig gemacht hab!
Also hab den Index der arrays mal die ganz unten sind mal berichtigt nun dürfte es stimmen.

Das mit deinem varchar müsste gehen. Aber es reicht ein varchar(10), jedenfalls bei mir

// EDIT

args SOOORRRYYYY^^ hast vollkommen recht.... das lustige ist das ich es im code richtig gemacht hab!
Also hab den Index der arrays die ganz unten sind mal berichtigt nun dürfte es stimmen.

Das mit deinem varchar müsste gehen. Aber es reicht ein varchar(10), jedenfalls bei mir
 
Habs ausprobiert. Mit einem varchar() geht es nicht. wenn ich dann Daten eingebe z.b. 12.01.2007 , 26.02.2005 und 02.02.2008 dann sortiert er nicht das Datum sondern nur die vorderen Zahlen d.h. 12, 26, 02.

Ich hab mir jetzt mal ne Syntax zusammengebastelt....nur sagt der mir wieder, dass da was falsch ist...

PHP:
mysql_query("SELECT DATE_FORMAT(GET_FORMAT(DATE,'EUR')) * FROM tshelfer_veranstaltungen_Abschlussball WHERE `datum`!='0000-00-00' ORDER BY `datum` ASC")
if(!$res_id = mysql_query($sqlselectabschlussball)){
	die(mysql_error());
	}

Was denn?:confused:
 
Habs ausprobiert. Mit einem varchar() geht es nicht. wenn ich dann Daten eingebe z.b. 12.01.2007 , 26.02.2005 und 02.02.2008 dann sortiert er nicht das Datum sondern nur die vorderen Zahlen d.h. 12, 26, 02.

Hallo,
mit PHP kenn ich mich zwar nicht aus, aber es ist ja eher ein SQL-Problem. Wenn ein Datum in einer varchar()-Spalte sortiert werden soll, müsste es in das Format 'YYYYMMDD' umformatiert werden.

20070112 , 20050226 und 20080202 werden als varchar() richtig sortiert.

Für die Einträge wie 12.01.2007 , 26.02.2005 und 02.02.2008 müsste auch ein
Code:
SELECT * FROM tshelfer_sonderkurse_salsa_stufeII WHERE `kurs-nr`!='' ORDER BY SUBSTR('datum',7,4), SUBSTR('datum',4,2), SUBSTR('datum',1,2)
funktionieren (ungetestet)

mfg
 
ARGS MAN
Du verstehst meinen code falsch der befehl date(ymdHi) gibt dir doch das alles ohne komma.... und du brauchst das ohne komma weil sonst geht das natürlich nicht...
Du musst nur das datum in der tabelle im varchar speichern mit der var $datum nach dem du die zeile dadrüber hast
Code:
$datum = date(ymdHi);
wenn du dieses $datum speicherst ist es 100%ig sortierbar!

zur ausgabe nimmst du das
Code:
$datumb = strval($datumb);
$datumb = chunk_split($datumb, 2, ' ');
$datumb = explode(' ',$datumb);
ALSO wenn du aus der tabelle dann das datum rausholst weise es einfach der var $datumb zu und dannacht füge meinen code ein...
DANN
Jahr = $darumb[0]
Monat = $datumb[1]
Tag = $datumb[2]
Stunde = $datumb[3]
Minuten = $datumb[4]
du hast dann ein array wo alle werte einzeln drinn stehn wie grad beschrieben

Hoffe kommst damit klar.... leichter kann ichs ja nicht machen es sei denn du gibst mir den code deiner seite...
 
Zurück