Sven Rautenberg: MySQL: Workaround für NEXT und PREVIOUS gesucht

Beitrag lesen

Moin!

Szenario:
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.

Und wenn nicht sortiert wird, dann kann es auch keinen vorhergehenden und nächsten Datensatz im Sinne der Sortierung geben.

Also Schritt 1: Sortieren. In SQL auch 'ORDER BY spaltenname' genannt. Wenn du nach ID sortieren willst, tu das bitte. ORDER BY ID. Wenn du nach Nachnamen sortieren willst: ORDER BY nachname. Nur damit hast du eine sortierte Ausgabe.

Und dann kommt Schritt 2: Du willst nicht alle Einträge der Datenbank haben, sondern nur einn paar bis hin zu nur einem einzigen. Und du willst blättern. Das Einschränken der Datensätze hast du schon fast ganz herausgefunden: LIMIT. Bedenke, daß LIMIT auch zwei Parameter annehmen kann! Entweder hast du LIMIT x, dann steht x für die Anzahl der Datensätze, die du haben willst. Oder du hast LIMIT x,y, dann steht x für den x.ten Datensatz in der unlimitierten Liste (Offset), der als erstes ausgegeben wird, und y für die Anzahl der Datensätze, die du haben willst.

Entsprechend mußt du nicht die WHERE-Bedingung ändern, sondern nur am LIMIT rumschrauben und stückweise die gesamte Datenbankausgabe abfragen, indem du das LIMIT veränderst.

Und dadurch verschwinden alle deine Probleme:

Nun das Problem:
Ich möchte die Adressen z.B. nach dem Nachnamen sortiert anzeigen. Nachnamen können aber Duplicates haben.

Außerdem könnte mir in der Zwischenzeit jemand den ersten Meyer geklaut haben, dann stimmt das Ergebnis auch nicht mehr.

Dagegen kann keiner was tun, du erhälst dann unter Umständen verfälschte  Ergebnisse, weil zwischendurch Daten gelöscht wurden.

- Sven Rautenberg