nick: mysql tabelle durchlaufen

Hallo,

ich habe eine mysql tabelle, dessen Datensätze ich über eine id(auto incremet) nummeriert habe.
Nun kann ein User die Tabelle über eine Website durchlaufen, dafür klickt er weiter, erscheint der nächste Datensatz, gesteuert über die nächstgrößte id.

Nun möchte ich weitere Funktionen für die Tabelle bereitstellen z.B automatisches erneutes Durchlaufen beim Ende der Tabelle.

Außerdem soll der user die Möglichkeit haben bestimmte Datensätze in andere Tabellen zu verschieben. Nur fehlt dann die id beim nächsten Durchlauf.

Nun habe ich vor den Durchlauf ohne id zu steuern.

Könntet ihr mir dafür ein paar Hinweise geben?

mfg nick

  1. Hi,

    Könntet ihr mir dafür ein paar Hinweise geben?

    Gerne, wenn du konkrete Fragen stellst.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. hallo,

      Könntet ihr mir dafür ein paar Hinweise geben?

      Gerne, wenn du konkrete Fragen stellst.

      wie kann ich eine tabelle per klick durchlaufen, also zum nächsten Datensatz gelangen, wenn die datensätze nicht nummeriert sind?

      mfg nick

      1. Hello,

        wie kann ich eine tabelle per klick durchlaufen, also zum nächsten Datensatz gelangen, wenn die datensätze nicht nummeriert sind?

        Das ist gar nicht trivial, insbesondere dann, wenn während des Durchlaufens der Tabelle an ihr auch Änderungen erlaubt sind. Das können Änderungen durch andere Benutzer sein, aber auch solche, wie Du sie besschrieben hast, also durch denselben Benutzer.

        Einen "nächsten Datensatz" gibt es in einer SQL-Datenbank nur dann, wenn ein entsprechendes Sortierkriterium (z.B. ein Index auf eine oder mehrere Spalten) benutzt wird. Dann können die Datensätze entsprechend ihrer voreingestellten Sortierung bereitgestellt werden.

        Das Problem dabei ist das Duplicate-Management.

        Wenn Du z.B. mehrere Müller_s in deiner Tabelle hast, möchtest jetzt aber sortiert über den Nachnamen (also die Spalte, die 'Müller' enthält) arbeiten, dann kann es Dir passieren, dass sich dein Tool beim Weiterrücken aufhängt, weil sich (zufällig) ein zirkulärer Verlauf beim Abarbeiten ergibt. Das liegt daran, dass die Reihenfolge, in der deine 17 Müller_s angezeigt werden bei jedem Request eine andere sein kann.

        Um dies zu vermeiden, baut man sich einen Kombinations-Index aus der Suchspalte und einer Unique-Spalte, vorzugsweise dem Primary Key. Der PK rückt dabei im Kombinations-Index an letzte Stelle. Somit ist sichergestellt, dass der Nachfolger von 'MULLER'+'2367' nicht 'MULLER'+'1222' sein kann, deine Abfrage der Müller_s also immer in derselben Reihenfolge erscheint.

        Den Rest müsstest Du jetzt selber hinbekommen:

        • Suchspalte festlegen

        -- neuen Aufsetzpunkt bestimmen
        -- Abfrage durchführen
        -- Listengrenzen merken (Suchspalte und Unique-Spalte)

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. Hi!

    Nun kann ein User die Tabelle über eine Website durchlaufen, dafür klickt er weiter, erscheint der nächste Datensatz, gesteuert über die nächstgrößte id.

    Die ID ist üblicherweise weder für eine Blätterfunktion noch für eine Sortierung ein geeignetes Kriterium. MySQL bietet für das gezielte Ansprechen anhand von Position in einer sortierten Ergebnismenge die LIMIT-Klausel an. Die zählt auch dann lückenlos, wenn beispielsweise durch eine WHERE-Klausel nur wenige Datensätze selektiert wurden.

    Nun möchte ich weitere Funktionen für die Tabelle bereitstellen z.B automatisches erneutes Durchlaufen beim Ende der Tabelle.

    Die angeforderte Position ist größer als die Anzahl der Datensätze. Letztere zu ermitteln gibt es COUNT(*) oder SQL_CALC_FOUND_ROWS/FOUND_ROWS(). Das kannst du als Entscheidung nehmen, wieder von vorn anzufangen. Du kannst natürlich auch vorher schauen, ob bei der Berechnung deines Vorwärts-Links die Positionsnummer größer als die Anzahl wird.

    Außerdem soll der user die Möglichkeit haben bestimmte Datensätze in andere Tabellen zu verschieben. Nur fehlt dann die id beim nächsten Durchlauf.

    Das ist bei LIMIT egal. Gegebenenfalls stimmt dann nur die Position nicht mehr, wenn du Datensätze quasi "unterm Pops weg klaust".

    Lo!