dedlfix: Eine Auugabe vor dem Treffer

Beitrag lesen

Tach!

SELECT * FROM table ORDER BY sort ASC

id ! sort ! titel

1 ! 7 ! titel
2 ! 5 ! titel
3 ! 2 ! titel
4 ! 4 ! titel
5 ! 3 ! titel
6 ! 6 ! titel
7 ! 1 ! titel

Diese Ausgabe passt nicht zum gezeigten Statement, es ist nicht nach sort sortiert.

doch wenn ich nur ab XXX abwärts ausgeben lassen möchte geht das nicht.

Worauf konkret bezieht sich das XXX?

SELECT * FROM table WHERE sort<4 ORDER BY sort ASC LIMIT

es sollt die Zeile mit der ID 5 kommen, aber es erscheint die Zeile mit der ID 1

Was genau möchtest du erreichen? Soll von der sortierten Menge nur ein Teil ausgegeben werden? Dann geht das nur anhand der Position in der Ergebnismenge unter Verwendung der LIMIT-Klausel. Ein ORDER BY zieht erst ganz am Ende und das LIMIT noch danach. Andere Klauseln davor - wie das WHERE - schränken also die Datenmenge ein, bevor eine Sortierung stattfindet.

Bei einem SQL-Statement werden die einzelnen Klauseln immer von links beginnend abgearbeitet. Ausnahme ist die Berechnung der in der SELECT-Klausel angeführten Felder/Ausdrücke. Das passiert zwischen WHERE und GROUP BY.

Abgesehen davon gibt es noch die Möglichkeit, die Ergebnismenge als Datenquelle zu nehmen. Dazu fügt man das Statement als Subquery in die FROM-Klausel eines übergeordneten Statements ein. Aber das scheint mir hier nicht notwendig zu sein. Alles müsste mit WHERE und LIMIT ausreichend einzuschränken gehen.

dedlfix.