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

Beitrag lesen

MySQL-Tabelle mit Adressen. Adresse wird gelesen und angezeigt. Nun will ich die nächste in Reihe. Solange die Sortierung auf der ID steht, ist das kein Problem,

Select * from adresse where ID > '$ID' Limit 1

Ich will dich ja nicht verunsichern, aber in diesem SQL-Statement wird nichts sortiert, sondern die Daten kommen so, wie sie gerade bunt von der Datenbank gefunden und ausgegeben werden, heraus. Durch den geschickten Einsatz von WHERE und LIMIT entsteht vielleicht der Eindruck, es würde sortiert - wird es aber nicht.

Hallo Sven,

ich hätte natürlich dazuschreiben sollen, dass ID der Primary Key der Tabelle ist. Auf Primary Keys liegt auch bei MySQL immer ein Unique Index, der automatisch verwendet wird, wenn das Feld angesprochen wird. Einzige Ausnahme: order by rand()
Dann bekommt man tatsächlich zufällig herausgepickte Datensätze.

Bei einem "normalen" Textfeld sieht das eben anders aus, weil man hier Duplicate-Management berücksichtigen muss. Ich denke, ich werde diese Aufwendige Prozedur vor mir haben. Es werden also ALLE Datensätze ins Resultset geholt werden müssen, die dem Gleichheitskriterium genügen. Die werden sortiert nach der ID. Müssten sie automatisch sein, wenn man nichts anderes angibt, habe ich aber mit so vielen Daten noch nicht probiert. Dann kann man sich in dem Resultset mit "Limit 1,x" bewegen. Für den Fall, das die untere oder die obere Grenze sich seit dem letzten Aufruf verschoben haben, muss man eben neu synchronisieren. Der Schritt zum nächst größeren oder kleineren Wert ist dagegen einfach. Da hilft wieder "Limit 1".

Ganz schöner Aufwand, nur weil die bei MySQL so puristisch sind, und keine Befehle für Next oder Previous eingebaut haben. Werde ich doch mal vorschlagen. Aber heute Abend nicht mehr. Jetzt bin ich zu müde..

Vielen Dank, dass Ihr Euch für mich Zeit genommen habt. Vielleicht fällt ja noch jemand was ein.

Gute Nacht wünscht

Tom