Hi Sven,
für NEXT:
Select Kunde, ID from kontakte where ID > 19
order by kunde,id limit 1
Angenommen, du bist jetzt bei der ID 4 - Dann wäre
der nächste Datensatz die ID 1. Du selektierst aber
nur die IDs, die größer als die 4 sind, also ID 5.
Damit fällt der Müller/ID 1 aus deiner Liste heraus.
Full ACK. Die WHERE-Bedingung müßte ungefähr lauten:
WHERE (kunde=$kundenname AND ID >19
OR (kunde>$kundenname)
bei ansonsten gleicher Sortierung.
Also beide Sortier-Kriterien von Aufruf zu Aufruf
durchreichen.
Das löst übrigens gleichzeitig noch ein zweites
Problem, nämlich das Verschwinden des vorherigen
Datensatzes (durch Löschen in einem anderen Task)
als Referenz für den nächsten.
Ich verstehe nicht, wieso du nicht in der Lage
bist, einfach einen Datensatzzeiger zu erfinden,
der vollkommen unabhängig von irgendwelchen IDs
ist, und einfach nur auf das derzeit angezeigte
Ergebnis der sortierten Tabelle aus der Datenbank
zeigt.
Ich schon - denn der würde bei ständigem Einfügen
und Löschen in dieser Tabelle massiv degenerieren.
Im Prinzip müßte das ja (semantisch betrachtet) ein
Binärstring sein, der die Position des Datensatzes
innerhalb des Primärschlüsselindexbaums beschreibt.
Dieser Baum kann aber beliebig tief werden ... und
deshalb müßte dieses Schlüsselfeld variabel lang sein.
Gleichzeitig wollen wir aber genau auf diesem Feld
einen UNIQUE INDEX haben ... hm.
Wenn du "WHERE ID > 19" abfragst und 1,5 Mio
Datensätze hast, dann werden 1,499981 Mio
Datensätze in eine Tabelle gelegt, dann sortiert
nach Name und ID, und dann gekürzt auf einen
Eintrag. Anders ist ein korrektes Ergebnis doch
garnicht hinzukriegen.
Wenn ein UNIQUE INDEX über dieser Spalte liegt, kann
das RDMBS einfach diesen Baum traversieren, um ein
ORDER BY zu realisieren.
Es muß keineswegs alle Treffer erzeugen - nur die
ersten 20 Stück.
Das wird nur performant, wenn du Indices in der
Tabelle benutzt.
Genau das war vorausgesetzt (wg. Primärschlüssel-
Eigenschaft der ID).
Viele Grüße
Michael
(der übrigens auch kein RDBMS kennt, welches vordefi-
nierte PRED()- oder SUCC()-Funktionen kennt - Relationen
sind per Definition Mengen und als solche unsortiert.)