Äußerst komischer Fehler bei SQL Order by / ASC

04/30/2015 19:33 mastermo#1
Heyho Leute,

kurz und knackig: ich habe ein unerklärbares Problem und brauche euren Rat dabei. :handsdown:

Ich habe eine Wiedergabe die mir Datensätze nach dem 'Datum' aufsteigend ausgeben soll.

PHP Code:
$query mysql_query("SELECT * FROM events ORDER BY 'date' ASC LIMIT 5"); 
Nirgends bockt die Wiedergabe rum, außer wenn ich dort als Datum 13.05.2015 oder 16.05.2015 eintrage (sollten nach Datum sortiert werden wo also Datensätze wie "02.05.2015" oder "09.05.2015" klar vorher gelistet werden müssten. Nun ist es aber so, dass er erst 13.05.2015 listet und danach erst 02.05.2015 und 09.05.2015. :confused:

In der Datenbank ist der Eintrag vom 13.05.2015 komischerweise auch ganz oben sortiert, obwohl Datum und sogar ID die letzten Einträge sind. :confused:

Die Einträge werden ganz normal mit einem Formular erstellt

PHP Code:
<?php
require_once('./config.php');

$title $_POST["title"];
$date $_POST["date"];
$start $_POST["start"];
$end $_POST["end"];
$image $_POST["image"];
$offer $_POST["offer"];
$price $_POST["price"];

if (
$title == "" or $image == "" or $offer == "") {
echo 
"Bitte alle Felder ausfüllen!&nbsp;";
echo 
'<a href="?cnt=home">Zurück</a>';
} else {

$eintrag "INSERT INTO events
(title, date, start, end, image, offer, price)

VALUES
('
$title', '$date', '$start', '$end', '$image', '$offer', '$price')";

$eintragen mysql_query($eintrag);

if(
$eintragen == true) {
echo 
"Eintrag erfolgreich.";
} else {
echo 
"Eintrag fehlgeschlagen. Bitte wenden Sie sich an den Administrator.";
}

}
?>
HTML Code:
</br></br>
<form action="?cnt=events" method="post">
<table style="width:400px">
<tr><td>Titel: </td><td><input name="title" value="Titel" type="text" size="45" /></td></tr>
<tr><td>Datum: </td><td><input type="text" name="date" value="<?=date("d.m.Y")?>" size="45"></td></tr>
<tr><td>Start: </td><td><input name="start" value="22:00" size="45"/></td></tr>
<tr><td>Ende: </td><td><input name="end" value="05:00" size="45"/></td></tr>
<tr><td>Grafik: </td><td><input name="image" type="url" value="Link zur Grafik (z.B. http://beispieldomain.de/img1.jpg)" size="45"></textarea></td></tr>
<tr><td>Angebote: </td><td><textarea name="offer" cols="46" rows="5"></textarea></td></tr>
<tr><td>Eintrittspreis (bsp. 5,00): </td><td><input name="price" value="5,00" size="45"/></td></tr>
<tr><td></td><td><input name="submit" type="submit" value="Erstellen" /></td></tr>
</table>
</form>
Aber das kann man denke ich ausschließen, da das Datum in jedem Fall in dem Format dd.mm.yyyy eingetragen wird.

Ich hoffe mir kann da wer von euch helfen, denn ich weiß nicht weiter oder gar wonach ich suchen sollte :D



Gruß & lieben Dank

Mo
04/30/2015 20:39 Shawak#2
Ich denke das Problem wird sein, dass du das Datum als dd.mm.yyyy abspeicherst.
Du solltest vorher zu dem Standartformat wechseln oder ggf in ostime umwandeln.

Außerdem bedeutet ASC doch ascending (aufsteigend), somit ist die Sortierung bis auf deine falsche Abspeicherung richtig. Wenn du das aktuellste (neuste) Datum zuerst haben möchtest musst du DESC descending (absteigend) sortieren.
04/30/2015 23:27 mastermo#3
Ne, das schon richtig mit ASC, weil das zeitnahste Datum zuerst angezeigt werden soll :)

Sprich heute, morgen, übermorgen im übertragenem Sinne :)

Das Datum ist eigentlich als text gespeichert und müsste doch dann eigentlich die Inhalte vergleichen oder? Ô.o Sprich die einzelnen Zeichen vergleichen oder irre ich mich da?

#edit: hat funktioniert; ich habe nun das Datum umstrukturiert und lasse ihn nun alles als Y-m-d speichern und mit d-m-Y wiedergeben und sortieren :)
05/01/2015 00:29 KoKsPfLaNzE#4
hallo, speicher das Datum doch einfach als datum in der db und nicht als text mit dem englischen-format (iso-format) yyyy-mm-dd, wenn das machst dann sollte es gehen=)
05/01/2015 01:02 mastermo#5
jup hab ich auch gemacht :)

Hätte noch ne weitere Frage und zwar folgendes:

ich ordere ja mit Order by 5 Datensätze an, wie kann ich den ersten überspringen? Sprich, dass er dann Datensatz 2,3,4,5,6 auflistet? Quasi +1

Gruß
Mo
05/01/2015 01:39 KoKsPfLaNzE#6
limit 1,5 wars glaub
05/01/2015 03:26 Shawak#7
jo, limit offset, count
05/01/2015 19:39 mastermo#8
Danke euch Leute, wenn ich euch nicht hätte... :)