bert: MySQL - den letzten Datensatz aus einer Tabelle herauslesen

Hallo,
ich würde gerne wissen, wie man den letzten Datensatz aus einer Tabelle herauslesen kann, ohne daß man einen bestimmten Wert angeben muß. Also wenn die Tabelle 5 Datensätze enthält, dann möchte ich herausbekommen, was im fünften drinsteht, allerdings kann ich nicht wissen, daß die Tabelle 5 Datensätze enthält. Es könnten genausogut auch 6 sein, dann wollte ich den Inhalt vom sechsten Datensatz.
SELECT * FROM Datensatz WHERE Datensatz = der letzte , so ungefähr sollte es als Abfrage aussehen.

Kann mir jemand weiterhelfen?

Grüße bert

  1. Hi bert

    Kann mir jemand weiterhelfen?

    Warum sortierst du nicht einfach umgekehrt und nimmst dann
    den ersten? order by desc limit 1,1 müsste das dann sein.
    Wenn du nicht sortierst, dann gibt es sowieso keinen ersten
    und letzten Datensatz weil die innerhalb einer relationalen
    DB keine Reihenfolge haben.

    Gruss Daniela

  2. Hallo,

    Hi

    ich würde gerne wissen, wie man den letzten Datensatz aus einer Tabelle herauslesen kann, ohne daß man einen bestimmten Wert angeben muß. Also wenn die Tabelle 5 Datensätze enthält, dann möchte ich herausbekommen, was im fünften drinsteht, allerdings kann ich nicht wissen, daß die Tabelle 5 Datensätze enthält. Es könnten genausogut auch 6 sein, dann wollte ich den Inhalt vom sechsten Datensatz.
    SELECT * FROM Datensatz WHERE Datensatz = der letzte , so ungefähr sollte es als Abfrage aussehen.

    Kann mir jemand weiterhelfen?

    Klar kann jemand ;-)
    Also:

    Also die einfachste Methode ist die Tabelle zu sortieren nach DESC oder ASC, je nachdem welchen Datensatz du haben willst (den ersten oder den letzten) und dann keine Schleife machen, und die Datenbank ausgeben, sondern nur einmal.
    Ich weiss noch ca. 3 andere Wege, aber dieser ist der leichteste(oder doch nicht !? *g*).

    gruß
      der flasher008

    Grüße bert

    1. Hi flasher008

      Also die einfachste Methode ist die Tabelle zu sortieren nach DESC oder ASC, je nachdem welchen Datensatz du haben willst (den ersten oder den letzten) und dann keine Schleife machen, und die Datenbank ausgeben, sondern nur einmal.
      Ich weiss noch ca. 3 andere Wege, aber dieser ist der leichteste(oder doch nicht !? *g*).

      Nicht wirklich der leichteste Weg und auch bei weitem der Unperformanteste.
      Du überträgst damit n Haufen völlig unnötige Resultate von der Datenbank
      an das Programm.

      Bei der Lösung mit Limit muss zwar auch alles zuerst sortiert werden
      Datenbankintern aber übermittelt wird nur noch der einzelne Datensatz.

      Gruss Daniela

      1. HI Daniela,

        Bei der Lösung mit Limit muss zwar auch alles zuerst sortiert werden

        immer?

        Wenn auf dem Sortierkriterium ein sortierter Index liegt, dann wird das
        RDBMS diesen sinnvollerweise traversieren und einfach nur den einen
        gesuchten Datensatz zurückliefern. Das ist dann genauso performant wie
        der Zugriff auf einen beliebigen einzelnen Datensatz der Tabelle über
        diesen Index.

        Viele Grüße
              Michael

    2. Hallo,
      Also die einfachste Methode ist die Tabelle zu sortieren nach DESC oder ASC, je nachdem welchen Datensatz du haben willst (den ersten oder den letzten) und dann keine Schleife machen, und die Datenbank ausgeben, sondern nur einmal.
      Ich weiss noch ca. 3 andere Wege, aber dieser ist der leichteste(oder doch nicht !? *g*).

      gruß
        der flasher008

      Grüße bert

      Hallo flasher008,

      Wie sehen, denn Deine drei anderen Wege aus? Es ist so, daß ich über ein Formular immer wieder neue Einträge in die Datenbank erhalte. Die Daten sollen dann per mail verschickt werden. Leider geht es nicht anders, als sie aus der Datenbank zu holen. Dafür benötige ich immer den aktuellsten Eintrag. Ich bin mir nicht so sicher, ob da das Sortieren am besten für geeignet ist.
      Grüße bert

      1. Hallo,
        Also die einfachste Methode ist die Tabelle zu sortieren nach DESC oder ASC, je nachdem welchen Datensatz du haben willst (den ersten oder den letzten) und dann keine Schleife machen, und die Datenbank ausgeben, sondern nur einmal.
        Ich weiss noch ca. 3 andere Wege, aber dieser ist der leichteste(oder doch nicht !? *g*).

        gruß
          der flasher008

        Grüße bert

        Hallo flasher008,

        Wie sehen, denn Deine drei anderen Wege aus? Es ist so, daß ich über ein Formular immer wieder neue Einträge in die Datenbank erhalte. Die Daten sollen dann per mail verschickt werden. Leider geht es nicht anders, als sie aus der Datenbank zu holen. Dafür benötige ich immer den aktuellsten Eintrag. Ich bin mir nicht so sicher, ob da das Sortieren am besten für geeignet ist.
        Grüße bert

        @Daniela: ich habe nie gesagt, dass der der Performance Hammer ist ;-)

        @bert: wenn du immer den aktuellsten Datensatz haben willst, dann mache es doch über AffectedRow.

        1. Hi flasher008

          @Daniela: ich habe nie gesagt, dass der der Performance Hammer ist ;-)

          Ich sagte auch nur, wie man das sehr einfach optimieren kann, ist
          genau wie deine Lösung nur halt wird nur der erste Datensatz aus dem
          ResultSet weitergeschickt. Deswegen an order by blub desc einfach noch ein
          limit 1,1 (vom ersten an, ein Datensatz) anhängen.

          @bert: wenn du immer den aktuellsten Datensatz haben willst, dann mache es doch über AffectedRow.

          Das wäre aber nur direkt wenn einer eingefügt wurde od geändert wurde.

          Gruss Daniela

          1. Hi flasher008

            @Daniela: ich habe nie gesagt, dass der der Performance Hammer ist ;-)

            Ich sagte auch nur, wie man das sehr einfach optimieren kann, ist
            genau wie deine Lösung nur halt wird nur der erste Datensatz aus dem
            ResultSet weitergeschickt. Deswegen an order by blub desc einfach noch ein
            limit 1,1 (vom ersten an, ein Datensatz) anhängen.

            @bert: wenn du immer den aktuellsten Datensatz haben willst, dann mache es doch über AffectedRow.

            Das wäre aber nur direkt wenn einer eingefügt wurde od geändert wurde.

            Gruss Daniela

            Hallo ihr beiden,
            vielen Dank für Eure Ideen. Werde versuchen Sie umzusetzen und hoffe damit weiterzukommen.
            Grüße bert