MySQL Select-Abfrage - letzten 20 Einträge, aber in der richtigen Reihenfolge?

loddarmattheus

Erfahrenes Mitglied
Hallo,
ich habe eine SQL-Abfrage, welche mir zwar die letzten Einträge anzeigt, aber verkehrt herum? Ich habe es so probiert, aber das geht leider nicht:
PHP:
$sth = $pdo->prepare("SELECT * FROM (SELECT * FROM ".TABELLE_INHALT." ORDER BY time DESC LIMIT 30) ORDER BY time ASC");
$sth->execute();

Ich erhalte folgenden Fehler:
PHP:
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ORDER BY time ASC' at line 1 in

Was mache ich falsch?
 
Lösung
Du musst ein Alias für die innere Klammer setzen
--> DB Fiddle - SQL Database Playground


Ausserdem: Eine Spalte "time" zu nennen ist ne tickende Zeitbombe
SQL:
SELECT T1.* FROM
    (SELECT * FROM EineTabelle ORDER BY Zeit DESC LIMIT 30) As T1
ORDER BY T1.Zeit ASC

heisst also irgendwie so:
PHP:
$sth = $pdo->prepare("SELECT T1.* FROM (SELECT * FROM ".TABELLE_INHALT." ORDER BY time DESC LIMIT 30) As T1 ORDER BY T1.time ASC");
$sth->execute();
Was heisst verkehrt herum?
Du willst die ältesten 30 nehmen und dann aufsteigend sortieren?
Und lass dir mal das zusammengesetzte SQL-Statement ausgeben um zu sehen ob das mit TABELLE_INHALT so kommt wie du dir das erhofst. Dann prüfst du den SQL-String direkt gegen die Datenbank und bastelst dort bis es funktioniert.
Da du ja keine Variablen übergibst, kannst du dich bei der Fehlersuche nach meinem Tutorial richten: [PHP][MySQLi] Debug Queries [Yaslaw.Info]

Einen Fehler sehe ich auf anhieb gerade nicht, aber ich kenne auch die Tabelle nicht.
 
Du musst ein Alias für die innere Klammer setzen
--> DB Fiddle - SQL Database Playground


Ausserdem: Eine Spalte "time" zu nennen ist ne tickende Zeitbombe
SQL:
SELECT T1.* FROM
    (SELECT * FROM EineTabelle ORDER BY Zeit DESC LIMIT 30) As T1
ORDER BY T1.Zeit ASC

heisst also irgendwie so:
PHP:
$sth = $pdo->prepare("SELECT T1.* FROM (SELECT * FROM ".TABELLE_INHALT." ORDER BY time DESC LIMIT 30) As T1 ORDER BY T1.time ASC");
$sth->execute();
 
Lösung
Zurück