Eine Auugabe vor dem Treffer
Marze
- datenbank
- mysql
0 Auge0 Rolf B0 Tabellenkalk0 Rolf B
0 dedlfix
Kann mir jemand hier weiterhelfen ?
Ich habe in meiner msql Datenbank folgende Tabelle, sie wir nach SORT sortiert
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
doch wenn ich nur ab XXX abwärts ausgeben lassen möchte geht das nicht.
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
Hallo
id ! sort ! titel 1 ! 7 ! titel 2 ! 5 ! titel 3 ! 2 ! titel 4 ! 4 ! titel 5 ! 3 ! titel 6 ! 6 ! titel 7 ! 1 ! titel
doch wenn ich nur ab XXX abwärts ausgeben lassen möchte geht das nicht.
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
Erst sprichst du davon, von XXX abwärts ausgeben zu lassen, wobei XXX kleiner vier ist (sort<4
). Eine Zeile mit sort = 5 darf demnach nicht im Ergebnis enthalten sein. Dann sprichst du davon, das Ergebnis abwärts (sortiert?) ausgeben zu lassen, sorgst aber mit ORDER BY sort ASC
dafür, dass die Sortierung aufsteigend erfolgt. Wenn es also einen Datensatz/Datensätze mit sort = 1 gibt, wird der/werden die auch zuerst angezeigt.
Tschö, Auge
Hallo Marze,
was du schreibst, ist reichlich merkwürdig und klingt nach einem Layer-8 Error.
Ich habe in meiner msql Datenbank folgende Tabelle, sie wir nach SORT sortiert
Nein, das wird sie nicht. Sie wird nach ID sortiert. Zumindest präsentierst Du das so.
Deine zweite Query sollte dieses Ergebnis liefern:
id !sort! titel
7 ! 1 ! titel
3 ! 2 ! titel
5 ! 3 ! titel
Wenn das bei Dir nicht der Fall ist, mach einen Schritt zurück und überprüfe deine impliziten Annahmen. Greifst Du tatsächlich auf die Daten zu, auf die Du zuzugreifen glaubst? Der MYSQL Server tut genau das, was Du ihm sagst, und bei so einfachen Queries tut er das auch zu 100% korrekt. Falls es Bugs im Server gibt, dann irgendwo in den Schmuddelecken, wo kaum einer rumläuft.
Prüfe also: Ist das, was Du ihm sagst, wirklich das, was Du auch willst?
Rolf
Hallo,
Nein, das wird sie nicht. Sie wird nach ID sortiert. Zumindest präsentierst Du das so.
Deine zweite Query sollte dieses Ergebnis liefern:
Auch die zweite angegebene Query kann nicht das liefern, was hier präsentiert wird: Die Limit-Klausel liefert ohne einen entsprechenden Parameter zumindest in meinem Test eine Fehlermeldung…
Gruß
Kalk
Hallo Tabellenkalk,
oh. LIMIT hab ich glatt übersehen 😂
Rolf
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.