ORDER BY date, funktioniert, aber die Zeit wird nicht berrücksichtigt.
am 16.07.2007 14:14:15 von Thomas Weinberger
Mein Problem ist folgendendes. Ich habe in einer Tablle Beiträge
gespeichert, diese sind alle mit einem date (timestamp) versehen Es können
zu einem Beitrag natürlich mehrere Antworten da sein.
Nun möchte ich imer die letzten 10 Antworten ausgeben, aber keine mit dem
doppelten Titel, das habe ich mittels Gruppieren gelöst. Sortiert werden die
Daten dann nach datum. Eigentlich funktioniert es, aber es wird nur das
Datum, nicht aber die Zeit sortiert.
Nun möchte ich die letzten
$sql = "select id,
titel,
date
from
tabelle
GROUP BY
titel
ORDER BY
date
DESC
LIMIT 10";
Weis jemand Rat?
Re: ORDER BY date, funktioniert, aber die Zeit wird nichtberrücksichtigt.
am 16.07.2007 20:28:15 von Harald Fuchs
In article ,
Andreas Kretschmer writes:
> begin Thomas Weinberger wrote:
>> Mein Problem ist folgendendes. Ich habe in einer Tablle Beiträge
>> gespeichert, diese sind alle mit einem date (timestamp) versehen Es können
>> zu einem Beitrag natürlich mehrere Antworten da sein.
>> Nun möchte ich imer die letzten 10 Antworten ausgeben, aber keine mit dem
>> doppelten Titel, das habe ich mittels Gruppieren gelöst. Sortiert werden die
>> Daten dann nach datum. Eigentlich funktioniert es, aber es wird nur das
>> Datum, nicht aber die Zeit sortiert.
>> Nun möchte ich die letzten
>> $sql = "select id,
>> titel,
>> date
>> from
>> tabelle
>> GROUP BY
>> titel
>> ORDER BY
>> date
>> DESC
>> LIMIT 10";
>> Weis jemand Rat?
> Das obige ist AFAIK ein Syntaxfehler: wenn Du mit GROUP BY hantierst,
> müssen alle im SELECT genannten Spalten entweder im GROUP BY stehen oder
> aber in einer Aggregatfunktion genutzt werden.
Du redest von Standard-SQL; wenn man in MySQL nicht
sql_mode=traditional oder sowas sagt, akzeptiert der Server diese Query und
liefert für jeden Titel irgendwelche zufällig ausgewählten IDs und
Zeitpunkte zurück. MySQL nennt diesen Unfug "SQL-Erweiterung".
> Für Dein Problem habe ich, glaub ich, mal ein nettes SQL gesehen, komme
> aber nicht drauf. Ich an Deiner Stelle würde mir aber eh eine SRF¹
> schreiben, die zuerst einmal alle in Frage kommendenden Titel suchen
> würde und dann dafür jeweils die 10 letzten Antworten.
Das geht auch in Standard-SQL:
SELECT x1.id, x1.titel, x1.date
FROM t1 x1
LEFT JOIN t1 x2 ON x2.titel = x1.titel AND x2.date >= x1.date
GROUP BY x1.id, x1.titel, x1.date
HAVING count(x2.id) <= 10
ORDER BY x1.titel, x1.date DESC;