Eintrag gelöscht -> nächst größere id zurückgeben

p-flash

Erfahrenes Mitglied
Hi,

wie erhalte ich die id des Eintrages der auf den gerade gelöschten folgt? Dabei sollen folgende Fälle berücksichtigt werden:

1. Nur ein Eintrag: Es soll z.B. -1 zurückgeben werden um zu signalisieren das die DB leer ist

2. Der gelöschte Eintrag war der EIntrag mit der höchsten id, also soll der Eintrag mit der kleinsten id zurückgeben werden (wrap around)


Schonmal danke!

p-flash
 
Z.B. In der Datenbank sind 5 Einträge mit folgenden ids (die lücken kommen vom löschen)

2 blabla
3 blabla
4 blabla
7 blabla
8 blabla

jetzt wird eintrag mit der id 4 gelöscht. es soll dann die id des nächstgrößeren zurückgegeben werden, also 7 (nicht 5). Wird 8 gelöscht soll ein wrap around gemacht werden. es soll also die 2 zurückgegeben werden.

p-flash
 
Eine spezielle SQL-Funktion dafür gibt es wahrscheinlich nicht, ich könnte mir aber einen anderen Lösungsweg vorstellen:

Vor dem Löschen wird ein Array mit den aktuellen Einträgen erzeugt.
PHP:
$result=mysql_query("SELECT * FROM `tabelle`");
$urspruenglich=Array();
while($row=mysql_fetch_assoc($result))
{
  $urspruenglich[]=$row;
}
//Löschvorgang
mysql_query("DELETE FROM `tabelle` WHERE `id`='$id'");
//$ursprunenglich durchlaufen bis gelöschter Wert
$check=false;
foreach($urspruenglich as $key=>$value)
{
  //s.u.
  if($check==true)
  {
    echo "Der Datensatz nach dem gelöschten hat die id $value[id]";
    break;//Schleife verlassen
  }
  //gelöschter datensatz
  if($value['id']==$id)
  {
    $check=true;
  }
//$check=true, bei nächstem Durchlauf wird 1. if-Schleife aktiv
}
//wenn jetzt $check immer noch false ist dann war der gelöschte der letzte datensatz
if($check==false)
{
  echo "Das war der letzte Datensatz!";
  echo "Erster Datensatz: $urspruengl[0]";
}

Hab ich jetzt aus dem Kopf aufgeschrieben, keine Ahnung ob es so stimmt...
 
Zuletzt bearbeitet:
Zurück