Thomas Schmieder: MySQL: Workaround für NEXT und PREVIOUS gesucht

Beitrag lesen

Hallo Sven, hallo Forum,

nachdem die Diskussion ja doch etwas angeregter wurde will ich hier wenigstens auch noch das Ergebnis verkünden.

Die Lösung lautet, im Beispiel mit meiner Kundendatenbank ausprobiert:

für PREVIOUS:

Select Kunde, ID from kontakte where ID < 19 order by kunde,id Desc limit 1

für NEXT:

Select Kunde, ID from kontakte where ID > 19 order by kunde,id  limit 1

wobei die 19 für den aktuellen Datensatz steht. Das minimiert die zu haltenden Daten auf die ID und die Order, hier sortiert nach Kunde und Subset ID

Diese zwei Werte wird man dann wohl im Form halten können, sodass sessionübergreifend gestept werden kann. Da hat ja CK so drauf rumgeritten, obwohl ich gar nicht verlangt hatte, dass irgendwo Zeiger oder ähnliches gehalten werden.

Bei ca. 1.500.000 Datensätzen kann man nur nicht jedesmal ein vollständiges Resultset anfordern, oder?

Noch zur Sortierung:
MySQL sortiert das Subset solange nach der ID, wie die Tabelle "noch neu" ist, das heißt, keine Datensätze gelöscht wurden. Die leeren Plätze werden dann nämlich beim nächsten Insert wieder aufgefüllt. Die Anzeige findet also tatsächlich nach Order und B+Tree-Struktur statt. Gut dass Sven nochmal darauf aufmerksam gemacht hat.

Die Befehle NEXT(ID,Order) und PREV(ID,Order) gibt es in vielen Client-Server-Datenbanken. Durch puristische SQL-DML-Schnittstellen gehen die dann verloren. Die DBEs können das, aber man kommt dann nicht mehr ran. Bei Informix kann man die DML-Schnittstelle austauschen und sein eigenes "SQL" ranbaumeln. dann wäre das machbar.

Ich muss dann noch einen Performance-Test machen, ob das bei mehr als 10.000 Datensätzen (mehr hatte ich ben nicht zur Verfügung) auch noch funxt oder aber in die Knie geht.

Nun ist aber Schluß für gestern.

Grüße

Tom