[SQL] ORDER BY - Problem

L

Lukasz

Hallo

Ich habe eine SQL Abfrage, und weis nicht wie ich sie Lösen soll.

Tabelle:
id | zeit | weitere daten....

Ich möchte für das erstellen eines Diagramms die letzten 360 Datensätze auslesen. Praktisch nach zeit geordnet:

PHP:
mysql_query("SELECT * FROM vms_mediatech ORDER BY zeit DESC LIMIT 360");

Nur das Problem ist, dass sofern ASC beutzt wird, ich die ersten 360 Datensätze bekomme. Wenn aber DESC benutzt wird, bekomme ich zwar die richtigen Datensätze, jedoch in der falschen Reihenfolge. Wie kann ich mein Problem lösen.

Danke!
 
Wahrscheinlich liegt es am Format beziehungsweise Typ der „datum“-Spalte. Was benutzt du: einen MySQL-eigenen Datumstypen, einen Integertyp für Unix-Zeitstempel oder einen Zeichenkettentyp?
 
Nein, Gumbo das habe ich anders verstanden: Er möchte die jüngsten Datensätze, also für limit die ersten einer absteigenden Sortierung, abfragen, diese aber aufsteigend sortieren.

Für MySQL > Version 4.1 kannst Du das mit einem Subquery lösen, ansonsten würde ich die Daten in ein Array einlesen (ich vermute mal, es geht um PHP) und dieses mit [phpf]array_pop[/phpf] von hinten auslesen.

Das Subquery:
SQL:
SELECT * 
FROM vms_mediatech as t1
WHERE t1.id IN (
    SELECT id 
    FROM vms_mediatech as t2 
    ORDER BY t2.zeit DESC LIMIT 360)
ORDER BY t1.zeit ASC

Die PHP-Variante in Ansätzen:
PHP:
$rows=array();
while ($row=mysql_fetch_assoc($result)) {
    $rows[]=$row;
}
while(count($rows)>0) {
    $row=array_pop($rows);
    //$row ausgeben, verarbeiten, etc.
}
Gruß hpvw

EDIT: Die öffnende eckige Klammer ist oben zu Murks geworden, bitte entsprechend anpassen.
 
Zuletzt bearbeitet:
Zurück