Hallo,
das geht auch mit Limit.Das sieht dann so aus:
...LIMIT 10,15...
Stimmt.
Einfach ein Kommer setzten, und er gibt dann von dem 10 bis zum 15 Eintrag aus.
Stimmt nicht!
Als erstes ist die Startreihe bei LIMIT 10,15 Reihe 11, denn die erste Reihe hat den Bezeichner 0 und zweitens
gibt er dann nicht 5 Reihen, sondern die Reihen 11 bis 25 aus.
Wenn man ORDER BY id DESC macht, so gibt er die letzten Einträge aus
Nun ja. Du setzt einfach voraus, dass id existiert, was nicht der Fall sein muss und lediglich aussagt, dass er nach der Spalte 'id' sortiert.
Und DESC bedeutet nicht, dass er die letzten Einträge ausgibt, sondern dass die Reihen in umgedrehter Reihenfolge (descending) sortiert werden , also die ID-Ordnung nicht aufsteigend sondern absteigend durchgeführt wird. Und wer jetzt denkt, man bekommt 25 bis 11 anstatt 11 bis 25 ist natürlich auf dem Holzweg.
Machen wir mal folgendes Beispiel mit einer Tabelle von id 0-6:
+------+
| id |
+------+
| 6 |
| 4 |
| 0 |
| 3 |
| 1 |
| 2 |
| 5 |
+------+
select * from table1 ORDER BY 'id' ASC;
würde folgendes zurückgeben (das ASC muss man nicht schreiben):
+------+
| id |
+------+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+------+
Wenigstens mal eine Reihenfolge. Jetzt machen wir etwas Lustiges: Wir LIMITieren ab Reihe 3 auf 3 Reihen, also
select * from table1 ORDER BY 'id' ASC LIMIT 2,3;
Dieses query wird zurückgeben:
+------+
| id |
+------+
| 0 | Zeile 1
| 1 | Zeile 2
| 2 | Zeile 3 (Hier beginnt das Result-Set) ZEILE1
| 3 | Zeile 4 ZEILE2
| 4 | Zeile 5 (Hier endet das Result-Set) ZEILE3
| 5 | Zeile 6
| 6 | Zeile 7
+------+
Also:
+------+
| id |
+------+
| 2 |
| 3 |
| 4 |
+------+
Jetzt das GLEICHE mit Absteigender Sortierung:
select * from table1 ORDER BY 'id' DESC LIMIT 2,3;
+------+
| id |
+------+
| 6 | Zeile 1
| 5 | Zeile 2
| 4 | Zeile 3 (Hier beginnt das Result-Set) ZEILE1
| 3 | Zeile 4 ZEILE2
| 2 | Zeile 5 (Hier endet das Result-Set) ZEILE3
| 1 | Zeile 6
| 0 | Zeile 7
+------+
Also:
+------+
| id |
+------+
| 4 |
| 3 |
| 2 |
+------+
Dies ist nur scheinbar das gleiche, weil wir LIMIT 2,3 wählten.
Testet man das Ganze einmal mit LIMIT 4,2 wird man feststellen, dass sich die Result-Sets unterscheiden. Und das muss man WISSEN, nicht vermuten. Denn Descending heisst eben nicht umgedrehtes Resultset, sondern absteigende Sortierreihenfolge!
select * from table1 ORDER BY 'id' ASC LIMIT 4,2;
+------+
| id |
+------+
| 4 |
| 5 |
+------+
UND
select * from table1 ORDER BY 'id' DESC LIMIT 4,2;
+------+
| id |
+------+
| 2 |
| 1 |
+------+
Viele Grüße Lars
P.S.: Vielleicht noch eine kleine Verbesserung von meinem letzten Posting. Da schrieb ich, dass das Offset die Anzahl von Reihen wäre. Das stimmt natürlich nicht. Das Offset ist "Beginn nach Zeile". Woraus sich die Syntax
LIMIT [Offset,] Rows
ableiten lässt.