Das Datum kannst du mit DATE_FORMAT formatieren (Alle mysql Datums- und Zeitfunktionen findest du
hier).
Die Darstellung kannst du natürlich nicht mit SQL alleine machen. Du kannst die Daten lediglich vorsortieren und musst dann eben in deinem Skript darauf achten die Sortierung zu gewährleisten. Dazu benutzt du zum Beispiel eben DATE_FORMAT um dir das Datum formatiert liefern zu lassen und prüfst in deinem Skript ganz einfach, ob das Datum das gleiche ist wie bei dem vorher ausgegebenen Datensatz. Ein minimalistisches Beispiel wäre sowas:
Code: Alles auswählen
$sql = 'SELECT daten, DATE_FORMAT('%d.%m.%Y', datum) as f_datum FROM tabelle ORDER BY datum DESC';
$result = mysql_query($sql) or die(mysql_error());
$alt = '';
while($row = mysql_fetch_assoc($result))
{
if($row['f_datum'] != $alt)
{
echo 'Krams für neues Datum ausgeben';
$alt = $row['f_datum'];
}
echo 'Krams innerhalb der Kategorie ausgeben';
//z.b.
echo $row['daten'];
}
mysql_free_result($result);
Was ich dir übrigens auch empfehlen würde ist zum einen, dass du nicht sämtliche Tabellenspalten von allen Tabellen holst wenn du nicht wirklich alle brauchst sondern das wirklich selektiv machst, denn erstens geht das schneller weil nicht unnötig Daten durch die Gegend geschickt werden und zweitens ist das günstiger wenn du deine Datenbank mal irgendwann erweitern möchtest, denn dann müsstest du vielleicht alte Skripte anpassen wenn du das so machst wie du es jetzt tust (wenn die z.b. mit Funktionen arbeiten, die alle Werte verarbeiten die du ausliest aber die neuen Werte z.b. nicht verarbeiten sollen).
Außerdem solltest du statt den N:N mappings zwischen den Tabellen die im Moment gemacht werden (in Form eines FULL JOINS) wenn du einfach von allen Tabellen gleichzeitig abfragst (jeder Wert von Tabelle a wird mit jedem von Tabelle b in jeder beliebigen Kombination in Erwägung gezogen, das Where schließt dann einige dieser Kombinationen aus) lieber ausnutzen, dass du nur bestimmte Datenkombinationen brauchst und z.b. stattdessen einen LEFT JOIN verwenden.
D.h. du legst eine primäre Tabelle fest von der du die Daten holst, alle anderen Tabellen bindest du per LEFT JOIN an und legst mittels ON fest, wie diese mit der primären Tabelle zusammenhängen. In der Regel gibt es ja zumindest eine Tabelle aus der du die Datensätze nicht mehrfach brauchst, diese kannst du dann als primäre Tabelle nutzen.
Als Beispiel:
Wenn du eine Fototabelle hast und dazu die User laden willst die diese Bilder eingestellt haben, dann kann ein User zwar mehrere Bilder hochladen, jedes Bild kann aber nur von einem User hochgeladen werden. In dem Fall nimmst du dann die Bilder als primäre Tabelle für deine Abfrage und bindest die Usertabelle per LEFT JOIN dazu (andersherum geht das zumindest mit dem LEFT JOIN nicht).
Dann würde so eine Abfrage z.b. so aussehen:
Code: Alles auswählen
SELECT u.userdaten, b.bilderdaten
FROM bilder b
LEFT JOIN user u ON b.user_id = u.user_id
WHERE b.bedingung = 'erfüllt'
ORDER BY b.datum DESC
Das kannst du natürlich ganz ohne Probleme auf mehrere Tabellen im Join erweitern (auch die Abhängigkeiten im ON Teil müssen nicht zwingend Abhängigkeiten von der primären Tabelle sein), Beispiele dazu findest du überall im Internet wenn du einfach mal nach SQL JOIN oder MYSQL JOIN suchst.