# letzter Eintrag aus MySQL-Tabelle



## g-zus (25. Juli 2002)

Hi Leude,

so hab mal wieder 2 kleine Fragen.
Und zwar:

Ich will aus meiner MySQL-Tabelle einmal den letzten Eintrag und einmal die letzten 3 Einträge raussuchen.

Nun, beim letzten Eintrag gehts glaub ich max(id) oder so im Querry.

Also


```
$result = mysql_query("SELECT * FROM tabelle WHERE id=max(id)");
```

Stimmt das so?!?!?
Wenn nein, bitte korrigieren.

Nun zum anderen Problem:

Ich will die letzten 3 Einträge raussuchen.
Nachteil:

Ab und zu werden Einträge aus der tabelle gelöscht. Wird nun jedoch ein neuer Eintrag hinzugefügt wird das löschen dieser einen ID jedoch nicht berücksichtigt und sie wird weiterhin erhöht.

Beispiel:
~~~~~~~~~

Sagen wir der letzte Eintrag hat die ID 9. Wird dieser nun gelöscht und ein neuer hinzugefügt hat der neue nicht wieder die ID 9 sondern die ID 10.

Gibt es da eine ID unabhängige methode zum raussuchen oder muss ich da auf einen Trick zurückgreifen?
Den Trick kenn ich ja vom prinzip her schon.

Es wird einfach eine extra Spalte mit dem namen "ID2" oder "NR" oder wie auch immer erzeugt und regulär die gleiche Nummer wie die ID eingefügt.
Sollte jedoch wie im Beispiel oben ein Einträg gelöscht werden, so wird jedoch nicht mehr die gleiche Zahl wie bei der Spalte ID vergeben, sondern eine Zahl höher als der letzte Eintrag. Im Beispiel wäre das dann für den Eintrag mit ID 10 trotzdem die "NR" 9.
OK? Leider müsste man auch hier Einträge beachten, die im nachhinein erstellt wurden.
Hat wer von euch was parat?

THX schon mal im Vorraus leute!


----------



## Dario Linsky (25. Juli 2002)

für das erste gibt's verschiedene lösungen. wenn du sicher bist, dass der letzte datensatz immer den höchsten wert im primärschlüssel hat, ist das ziemlich einfach. 
du kannst z.b. die tabelle absteigend sortieren und hast dann den letzten datensatz (den mit der höchsten id) ganz oben:

```
SELECT * FROM tabelle ORDER BY id DESC;
```
andersrum kannst du natürlich auch erst mit der MAX-funktion eine abfrage starten, die dir die höchste id liefert und dann den datensatz dazu gezielt raussuchen.
das sind zwei mögliche wege, wie man das nur mit sql lösen kann.

das zweite problem ist der grosse nachteil von auto_increment-feldern. die zählen sich selber immer weiter hoch und lassen keine fremdeingaben zu.
lass das feldattribut weg und gib die id jedes mal selber ein. du musst dann nur darauf achten, dass du keine fehler machst, sonst steht nachher was falsches in der datenbank.
beim löschen lässt du dann einfach nochmal eine schleife über die tabelle laufen in der du die primärschlüssel neu einträgst, damit keine lücken entstehen.


----------



## g-zus (25. Juli 2002)

das zweite problem hat sich erledigt.

eine löschfunktion wird nicht nötig sein und deshalb kann ich mich auf die stetig korrekte id nummern verlassen.

aber nochmal zu problem 1:

würde nun das gehen?


```
$result = mysql_query("SELECT * FROM tabelle WHERE id=max(id)");
```

Oder ginge vielleicht auch das?


```
$result = mysql_query("SELECT * FROM tabelle ORDER BY id DESC;");

   for ($i=0;$i<$1;$i++)
   {
      $row = mysql_fetch_array($result);
      $id = $row[id];
      .........
   }
```


----------



## Dario Linsky (25. Juli 2002)

beim ersten glaub ich schon, dass das geht. sicher bin ich aber nicht.
wenn du aber einfach nur den datensatz mit der höchsten id brauchst, mach das doch einfach so:

```
$sql = "SELECT * FROM tabelle ORDER BY id DESC;";
$res = mysql_query($sql);
$letzter_datensatz = mysql_fetch_array($res);
$letzte_id = $letzter_datensatz["id"];
```


----------

