Abfrage nach Datum sortieren

Ich kenne mich mit Datenbanken zwar nicht so gut aus, aber das sollte (wenn auch über eine temporäre Tabelle) dennoch möglich sein. Notfalls kannst du dazu auch PHP verwenden, etwa:
PHP:
$result = mysql_query('SELECT id, usersince FROM user');
mysql_query('ALTER TABLE user MODIFY usersince DATE NOT NULL');
while ($row = mysql_fetch_assoc($result)) {
	mysql_query('UPDATE user SET usersince = "'.implode('-', array_reverse(explode('.', $row['usersince']))).'" WHERE id = '.$row['id']);
}
 
D.h. wenn ich das Datum nun in yyyy-mm-dd umwandele kann man einfach per:

PHP:
ORDER BY usersince DESC

sortieren?

Oder kann man das nicht auch im Script ordnen?

Das ist ein Script, welches ein Diagramm ausgibt:

PHP:
$DatabaseHost = "localhost";
$DatabaseUser = "";
$DatabasePassword = "";
$Database = "";

$Diagrammbreite = 600;
$Diagrammhoehe = 400;
$Diagrammtitel = "Anmeldungen";
$AbstandAussen = 0;
$RandOben = 30;
$RandLinks = 30;
$RandUnten = 60;
$RandRechts = 20;
$HintergrundfarbeR = 255;
$HintergrundfarbeG = 255;
$HintergrundfarbeB = 255;
$HintergrundfarbeAuswertungsbereichR = 232;
$HintergrundfarbeAuswertungsbereichG = 232;
$HintergrundfarbeAuswertungsbereichB = 232;
$TextfarbeR = 255;
$TextfarbeG = 140;
$TextfarbeB = 0;
$AchsenfarbeR = 0;
$AchsenfarbeG = 0;
$AchsenfarbeB = 128;
$BalkenfarbeR = 255;
$BalkenfarbeG = 140;
$BalkenfarbeB = 0;
$DatabasePointer = mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword);
mysql_select_db($Database, $DatabasePointer);
$ResultPointer = mysql_query("SELECT SUBSTRING(usersince, 1, 10) as Date, COUNT(usersince) as Submits FROM user GROUP BY usersince ORDER BY usersince DESC", $DatabasePointer);
for($i=0, $XWerte="", $YWerte=""; $i<mysql_num_rows($ResultPointer); $i++)
{
   $Stat = mysql_fetch_object($ResultPointer);
   $XWerte[] = $Stat->Date;
   $YWerte[] = $Stat->Submits;
}
$XMin = 0;
$XMax = count($XWerte);
$Tmp = $YWerte;
sort($Tmp);
$YMin = $Tmp[0];
rsort($Tmp);
$YMax = $Tmp[0];
header("Content-type: image/png");
$Grafik = imagecreatetruecolor($Diagrammbreite, $Diagrammhoehe);
$Textfarbe = imagecolorallocate($Grafik, $TextfarbeR, $TextfarbeG, $TextfarbeB);
$Hintergrundfarbe = imagecolorallocate($Grafik, $HintergrundfarbeR, $HintergrundfarbeG, $HintergrundfarbeB);
$HintergrundfarbeAuswertungsbereich = imagecolorallocate($Grafik, $HintergrundfarbeAuswertungsbereichR, $HintergrundfarbeAuswertungsbereichG, $HintergrundfarbeAuswertungsbereichB);
$Achsenfarbe = imagecolorallocate($Grafik, $AchsenfarbeR, $AchsenfarbeG, $AchsenfarbeB);
$Balkenfarbe = imagecolorallocate($Grafik, $BalkenfarbeR, $BalkenfarbeG, $BalkenfarbeB);
imagefill($Grafik, 0, 0, $Hintergrundfarbe);
imagefilledrectangle($Grafik, $AbstandAussen+$RandLinks, $AbstandAussen+$RandOben, $Diagrammbreite-1-$AbstandAussen-$RandRechts, $Diagrammhoehe-1-$AbstandAussen-$RandUnten, $HintergrundfarbeAuswertungsbereich);
if($YMax>10)
{
   $YMaxAbstand = 10;
}
else
{
   $YMaxAbstand = $YMax;
}
$YAbstand = ($Diagrammhoehe-2*$AbstandAussen-$RandOben-$RandUnten-10)/$YMaxAbstand;
$YWertHoehe = ($Diagrammhoehe-2*$AbstandAussen-$RandOben-$RandUnten-10)/$YMax;
$XAbstand = ($Diagrammbreite-2*$AbstandAussen-$RandRechts-$RandLinks-10)/$XMax;
$Balkendicke = ($XAbstand-4)/2;
imagesetstyle($Grafik, array($Achsenfarbe, $Achsenfarbe, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT));

for($i=0; $i<$YMaxAbstand; $i++)
{
   imageline($Grafik, $AbstandAussen+$RandLinks, $AbstandAussen+$RandOben+10+($YAbstand*$i), $Diagrammbreite-$AbstandAussen-$RandRechts-1, $AbstandAussen+$RandOben+10+($YAbstand*$i), IMG_COLOR_STYLED);
}
imageline($Grafik, $AbstandAussen+$RandLinks, $Diagrammhoehe-$AbstandAussen-$RandUnten, $Diagrammbreite-$AbstandAussen-$RandRechts, $Diagrammhoehe-$AbstandAussen-$RandUnten, $Achsenfarbe);
imageline($Grafik, $AbstandAussen+$RandLinks, $Diagrammhoehe-$AbstandAussen-$RandUnten-1, $Diagrammbreite-$AbstandAussen-$RandRechts, $Diagrammhoehe-$AbstandAussen-$RandUnten-1, $Achsenfarbe);
for($i=0; $i<$XMax; $i++)
{
   imageline($Grafik, $AbstandAussen+$RandLinks+($XAbstand*$i)+($XAbstand/2+3), $Diagrammhoehe-$AbstandAussen-$RandUnten-2, $AbstandAussen+$RandLinks+($XAbstand*$i)+($XAbstand/2+3), $Diagrammhoehe-$AbstandAussen-$RandUnten+2, $Achsenfarbe);
   imagestringup($Grafik, 1, $AbstandAussen+$RandLinks+($XAbstand*$i)+($XAbstand/2), $Diagrammhoehe-$AbstandAussen-$RandUnten+4+(imagefontwidth(1)*strlen($XWerte[$i])), $XWerte[$i], $Achsenfarbe);
}
imageline($Grafik, $AbstandAussen+$RandLinks, $AbstandAussen+$RandOben, $AbstandAussen+$RandLinks, $Diagrammhoehe-$AbstandAussen-$RandUnten, $Achsenfarbe);
imageline($Grafik, $AbstandAussen+$RandLinks+1, $AbstandAussen+$RandOben, $AbstandAussen+$RandLinks+1, $Diagrammhoehe-$AbstandAussen-$RandUnten, $Achsenfarbe);
for($i=0; $i<=$YMaxAbstand; $i++)
{
   imageline($Grafik, $AbstandAussen+$RandLinks-2, $AbstandAussen+$RandOben+10+($YAbstand*$i), $AbstandAussen+$RandLinks+2, $AbstandAussen+$RandOben+10+($YAbstand*$i), $Achsenfarbe);
   if($YMax>10)
   {
      imagestring($Grafik, 1, $AbstandAussen+$RandLinks-4-(imagefontwidth(1)*strlen(round($YMax-(($YMax/10)*$i), 0))), $AbstandAussen+$RandOben+10-(imagefontheight(1)/2)+($YAbstand*$i), round($YMax-(($YMax/10)*$i), 0), $Achsenfarbe);
   }
   else
   {
      imagestring($Grafik, 1, $AbstandAussen+$RandLinks-4-(imagefontwidth(1)*strlen($YMax-$i)), $AbstandAussen+$RandOben+10-(imagefontheight(1)/2)+($YAbstand*$i), $YMax-$i, $Achsenfarbe);
   }
}
for($i=0; $i<$XMax; $i++)
{
   imagerectangle($Grafik, $AbstandAussen+$RandLinks+($XAbstand*($i+1))-($XAbstand/2-3)-$Balkendicke, $Diagrammhoehe-$AbstandAussen-$RandUnten-($YWertHoehe*$YWerte[$i]), $AbstandAussen+$RandLinks+($XAbstand*($i+1))-($XAbstand/2-3)+$Balkendicke, $Diagrammhoehe-$AbstandAussen-$RandUnten, $Achsenfarbe);
   imagefilledrectangle($Grafik, $AbstandAussen+$RandLinks+($XAbstand*($i+1))-($XAbstand/2-3)-$Balkendicke+1, $Diagrammhoehe-$AbstandAussen-$RandUnten-($YWertHoehe*$YWerte[$i])+1, $AbstandAussen+$RandLinks+($XAbstand*($i+1))-($XAbstand/2-3)+$Balkendicke-1, $Diagrammhoehe-$AbstandAussen-$RandUnten-2, $Balkenfarbe);
}
imagestring($Grafik, 5, $AbstandAussen+$RandLinks+($Diagrammbreite-(2*$AbstandAussen+$RandLinks+$RandRechts)-imagefontwidth(5)*strlen($Diagrammtitel))/2, $AbstandAussen, $Diagrammtitel, $Textfarbe);
imagepng($Grafik);
imagedestroy($Grafik);
 
Was mir übrigens grade auffällt beim ersten Post: müsste es nicht heißen "d.m.Y" statt "dd.mm.YYYY"?

D.h. wenn ich das Datum nun in yyyy-mm-dd umwandele kann man einfach per:

PHP:
ORDER BY usersince DESC

sortieren?

So mache ich es jedenfalls...
Ansonsten verwende diese Formatierung beim Sortieren: "Ymd", damit hast du vielleicht mehr Erfolg.
 
Super, vielen Dank! Habs mit einer Funktion alles umgeschrieben und nun funktionierts!

Sagt mal wie kann ich nun das Datum wieder anders ausgeben? Also sortieren tue ich es ja im Format: yyyy-mm-dd und ausgeben möchte ich es im Format: dd.mm.yyyy

Wie kann man eigentlich die letzten 7 Datums zum aktuellem ausgeben?

PHP:
$ResultPointer = mysql_query("SELECT SUBSTRING(usersince, 1, 10) as Date, COUNT(usersince) as Submits FROM user GROUP BY usersince ORDER BY usersince ASC", $DatabasePointer);
 
Habe es jetzt mal damit probiert:

PHP:
WHERE usersince between NOW() and NOW()-1

aber das funktioniert nicht! Wie bekomme ich es hin, dass er mir alle Datensätze von heute bis vor 31 Tagen anzeigt?
 
Ungefähr so (nicht getestet, sollte aber hinkommen):
PHP:
[...] WHERE usersince BETWEEN curdate() AND DATE_SUB(curdate(), INTERVAL 31 DAY)

Damit fragst du die Daten ab, deren Datum zwischen heute (curdate()) und heute - 31 Tage liegen. Mit "DATE_ADD" würdest du die nächsten 31 Tage abfragen...

Aber solche Informationen findest du auch im Internet. Hier mal eine Seite, auf der zufällig das steht, was du verwendest: Link

Gruß
derPfaff
 
Zurück