roemerquelle: letzte Zeile in mySQL Datenbank ?

Hi!

Ich habe hier gestern schonmal gepostet (http://forum.de.selfhtml.org/?m=36746&t=6640) bin dann aber leider nicht mehr dazu gekommen zu antworten.
Deshalb bedanke ich mich hier nochmal für alles, ich denke aber, dass meine Frage etwas missverstanden wurde.

Ich möchte nämlich ohne eine ID mit auto increment arbeiten - denn das ist ziemlich unsicher - und die Einträge auf einzelne Seiten aufteilen, wobei immer 10 davon pro Seite sein sollen. Also bei 45 Einträgen 5 Seiten.

Nun wollte ich wissen ob es in mySQL eine Funktion gibt mit der man (ohne eine ID zu verwenden!) die zuletzt eingefügte Zeile herausfinden kann und sich dann darin so bewegen kann, dass dann zb. auf Seite 5 die Einträge von 41 bis 50 ausgegeben werden.

Als bestes Beispiel kann ich da Perl und den Umgang mit Textfiles nennen ($#file = Letzte Zeile).

Leider kenne ich mich mit mySQL nicht sehr gut aus und hoffe, dass ihr mir helfen könnt.

Ich bedanke mich schon einmal, falls ich wieder keine Zeit dazu finde.

  1. Auch hi!

    Ich habe hier gestern schonmal gepostet (http://forum.de.selfhtml.org/?m=36746&t=6640) bin dann aber leider nicht mehr dazu gekommen zu antworten.
    Deshalb bedanke ich mich hier nochmal für alles, ich denke aber, dass meine Frage etwas missverstanden wurde.

    Die Gefahr besteht immer...

    Ich möchte nämlich ohne eine ID mit auto increment arbeiten - denn das ist ziemlich unsicher -

    was ist daran unsicher?

    Nun wollte ich wissen ob es in mySQL eine Funktion gibt mit der man (ohne eine ID zu verwenden!) die zuletzt eingefügte Zeile herausfinden kann und sich dann darin so bewegen kann, dass dann zb. auf Seite 5 die Einträge von 41 bis 50 ausgegeben werden.

    Wie sind denn die Einträge 41-45 gekennzeichnet?

    Als bestes Beispiel kann ich da Perl und den Umgang mit Textfiles nennen ($#file = Letzte Zeile).

    Also: wenn du mit Perl (oder sonst einer Sprache) ein Flat-File schreibst, dann geschieht das immer linear/sequentiell... das ist bei Rel. Datenbanken nicht unbedingt der Fall.

    Aber um beim Vergleich zu bleiben: was ist nun "unsicherer" an der Vergabe eines Primärschlüssels (nennen wir es ID) mit Auto-Inkremement, als das zeilenweise Schreiben in eine Datei....?

    Gruss Sven

    1. nun ja im Fall von Perl teile ich die Zeilen den verschiedenen Seiten zu. Demnach sind also zb. die Zeilen 11-20 auf der Seite 2 (immer 10 pro Seite). Hier macht es auch nichts aus, wenn mal eine Zeile gelöscht wird.
      In mySQL würd ichs genauso machen nur eben mit ID statt der Zeile. Fehlt jetzt aber eine oder mehrere Zeile(n), werden auf einer Seite nicht mehr 10 Einträge anzeigen, was ja keinen Sinn macht. Dann hätte ich irgendwann 5 Seiten für 5 Einträge.
      Aber wie gesagt ist das die einzige Möglichkeit, die ich kenne, weil ich mich mit mySQL noch nicht so gut auskenne.
      Vielleicht kennt ja jemand von euch einen Weg immer 10 Einträge rauszugreifen,, unabhängig von der ID.

      1. nun ja im Fall von Perl teile ich die Zeilen den verschiedenen Seiten zu. Demnach sind also zb. die Zeilen 11-20 auf der Seite 2 (immer 10 pro Seite). Hier macht es auch nichts aus, wenn mal eine Zeile gelöscht wird.

        in mysql auch nicht !

        In mySQL würd ichs genauso machen nur eben mit ID statt der Zeile. Fehlt jetzt aber eine oder mehrere Zeile(n), werden auf einer Seite nicht mehr 10 Einträge anzeigen, was ja keinen Sinn macht.

        Dann hätte ich irgendwann 5 Seiten für 5 Einträge.
        Nein! Du kannst ja mysql mitteilen, daß z.b. beginnend bei ID 36, 5 Datensätze angezeigt habe willst (36-40 inkl.)

        Aber wie gesagt ist das die einzige Möglichkeit, die ich kenne, weil ich mich mit mySQL noch nicht so gut auskenne.

        macht ja nix -kann man ja lernen..

        Vielleicht kennt ja jemand von euch einen Weg immer 10 Einträge rauszugreifen,, unabhängig von der ID.

        s.o.

        Gruss Sven

        1. benutze eine sql abfrage mit limits...

          du selectest alles was du willst in der reihenfolge wie du magst aber mit limits...

          auf den seiten kannst du dann per paramter hidden-field/url den anzuzeigenden block weitergeben und als variable in die sql-abfrage einführen und so den nächsten block herauslösen...

          http://www.mysql.com/doc/S/E/SELECT.html

          Odium

      2. use Mosche;

        In mySQL würd ichs genauso machen nur eben mit ID statt der Zeile. Fehlt jetzt aber eine oder mehrere Zeile(n), werden auf einer Seite nicht mehr 10 Einträge anzeigen, was ja keinen Sinn macht. Dann hätte ich irgendwann 5 Seiten für 5 Einträge.

        Entkoppel die IDs von der Nachrichtenseite. Die ersten 10 Einträge (= 10 kleinste IDs) kommen auf die erste Seite, ...

        Vielleicht kennt ja jemand von euch einen Weg immer 10 Einträge rauszugreifen,, unabhängig von der ID.

        Benutz einen anderen SQl Befehl

        Select * from deine_tabelle order by id;

        Dann kommen zuerst die kleinen IDs. Für die erste Seite nimmst du die ersten 10 Ergebnisse, für die zweite Seite die nächsten 10. Wenn du mehr SQL kannst, kannst du auch den SQL so modifizieren, dass du nur die gewünschten Ergebnisse bekommst (wie es Sven vorgeschlagen hat). Behilf dir aber erstmal damit.

        use Tschoe qw(Matti);

  2. Bongú !

    Ich möchte nämlich ohne eine ID mit auto increment arbeiten - denn das ist ziemlich unsicher -

    Inwiefern "unsicher", wenn ich fragen darf?

    und die Einträge auf einzelne Seiten aufteilen, wobei immer 10 davon pro Seite sein sollen. Also bei 45 Einträgen 5 Seiten.

    Nun wollte ich wissen ob es in mySQL eine Funktion gibt mit der man (ohne eine ID zu verwenden!) die zuletzt eingefügte Zeile herausfinden kann und sich dann darin so bewegen kann, dass dann zb. auf Seite 5 die Einträge von 41 bis 50 ausgegeben werden.

    Als bestes Beispiel kann ich da Perl und den Umgang mit Textfiles nennen ($#file = Letzte Zeile).

    Eine Entsprechung hierfür gibt es in SQL grundsätzlich nicht!

    Eine SQL-Datenbank arbeitetet nicht in dem Sinne zeilenorientiert, wie du es zu glauben scheinst.

    Das Ergebnis einer SELECT-Abfrage ist immer eine (zunächst) ungeordnete Menge von Datensätzen, die keine (sicher) vorhersehbare Reihenfolge haben.

    Beeinflussen kannst du die Reihenfolge der zurückgelieferten Datensätze lediglich über eine ORDER BY Anweisung. Hierzu musst du dann aber (mindestens) ein Feld angeben, nach dem sortiert werden soll. Dies wäre, wenn es um die Reihenfolge der Eintragungen geht, am besten ein ID-Feld (autoincrement).

    Vielleicht erklärst du noch einmal genauer, was dir an diesem Feldtyp nicht behagt.

    Sahha,

    kerki