Sven Rautenberg: Ermitteln an wievielter Stelle Datensatz ist? (mysql)

Beitrag lesen

Moin!

Ich hab in einer Datenbank 100.000 Datensätze, mit Nummern.

Nach diesen Nummern absteigend sortiert hole ich mir jetzt die ersten 5000 Datensätze. Die sind aber nicht durchgehend nummeriert, da sie auto_increment sind und zwischendurch welche gelöscht wurden.

An welcher Position ist jetzt der Datensatz mit Nummer 2634 ?

Diese Information ist für die Datenbank - und auch für dich - irrelevant.

Du willst Seiten ausgeben, auf denen jeweils eine fortlaufende Teilmenge der Datenbank ausgegeben wird. Also im Prinzip willst du blättern.

Die Anweisung LIMIT liefert dir dazu alles, was du wissen mußt. Damit kannst du exakt den 120.sten Datensatz deiner Sortierung, sowie die nachfolgenden x Datensätze auswählen und ausgeben lassen.

Das Blättern ist lediglich eine Variation dieser Zahlen: Die Zahl der Datensätze pro Seite dürfte konstant sein, und die Startzahl, bei welcher die Datensatzliste beginnt, wird verändert.

Mit anderen Worten: Wenn du 20 Datensätze pro Seite ausgeben willst, und du bei der laufenden Nummer 120 bist, hast du damit genau zwei Informationen:
Die vorhergehende Seite beginnt bei laufender Nummer 100 (120 - 20 = 100), und die nachfolgende Seite beginnt bei laufender Nummer 140 (120 + 20 = 140).

Eine dieser Zahlen gibst du in dein neues LIMIT ein, um die vorhergehende oder nachfolgende Seite aufzurufen. Nirgendwo hingegen erscheint die Datensatz-ID. Sie ist in diesem Zusammenhang irrelevant, weil sie allenfalls ein Sortier-Kriterium ist (das aber auch nur, wenn einem sonst nichts besseres einfällt - üblicherweise wird eher nach Dingen wie Name etc. sortiert), aber kein Listenzugriffskriterium.

Logischerweise mußt du verhindern, dass du außerhalb des Bereichs gültiger LIMITs blätterst. Wenn also die vorhergehende Seite bei einer Datensatznummer kleiner als Null starten soll, solltest du den Wert auf Null (oder war es Eins?) setzen. Und wenn am Ende der Liste weniger als 20 Datensätze ausgegeben werden (mitzählen oder die Datenbank fragen), dann lohnt es kaum, noch einen Link auf die folgende Seite zu setzen, weil die dann mit Sicherheit leer sein wird.

- Sven Rautenberg

--
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|