Problem mit ID, auto_increment, Daten bearbeiten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit ID, auto_increment, Daten bearbeiten

    Hallo zusammen,

    ein neues Problemchen. Ich habe ein kleines Formular entwickelt, mit dem ich neue Termine in meinem Kalender eintragen kann. Das sind vier Felder, die ich wie folgt in eine Tabelle "Termine" eintrage

    Code:
    $eintrag = "INSERT INTO Termine (startdatum,enddatum,titel,beschreibung) VALUES
    ('$startdatum','$enddatum','$neutitel','$neubeschreibung')";
    Das funktioniert auch prima. Nun habe ich da ein weiteres Feld ID mit auto_increment, so dass jeder neue Eintrag eben eine eigene ID bekommt. Das funktioniert auch.

    Weiter habe ich eine Funktion, mit der ich Einträge aus der Tabelle entfernen kann. Das mache ich mit folgenden Code:

    Code:
    mysql_query("delete from Termine where ID='$delid'");
    Das funktioniert auch. So weit so gut bis hierher.
    Wenn ich nun z.B. 10 Einträge habe, habe ich also die ID's 1 bis 10. Nun lösche ich den Eintrag, der die ID 5 hat. Wenn ich mir nun das nächste mal die Daten anzeigen lassen, habe ich in einer Spalte die ID's stehen. Da erscheint dann ja 1,2,3,4,6,7,8,9,10. Wenn ich dann einen neuen Eintrag hinzufüge, bekommt der die ID 11.
    Rein funktional ist das ja alles kein Problem. Das funktioniert ja prima, aber irgendwie finde ich das unschön. Ich würde das nun gerne so gestalten, dass wenn ich einen Eintrag lösche, die nachfolgenden Einträge quasi eine neue ID bekommen und zwar, dass die dann eben alle einen zurück rutschen, so dass ich dann nicht 1,2,3,4,6,7,8,9,10,11 habe nach einem gelöschen und dann einem neu eingefügten Eintrag, sondern dass wenn ich einen Eintrag lösche, z.B. mit der ID fünf, dass das dann so aussieht 1,2,3,4,5,6,7,8,9 anstatt 1,2,3,4,6,7,8,9,10.
    Ich lese nun die Datensätze aus. Wenn ich nund auf die ID stoße, die eins größer ist, als die ID, die geläscht wurde, wird sie um einen verringert. Allerdings weiß ich nun nnicht, wie ich dann die neue ID wieder an den entsprechnden Platz eintragen soll. Um auf das Beispiel von oben zurück zukommen. Der IEntrag mit der ID 5 wurde gelöscht, der nächste Eintrag hat die ID 6, dessen ID wird um eins verringert und soll nun an die Stelle geschrieben, wo vorher die 6 stand.
    Ist sicher ien wneig verwirrend geschrieben, aber ich hoffe man kann da durchblicken.
    Mein bisheriger Code zum Auslesen sieht wie folgt aus.
    Code:
    if ($order=="") {$order="startdatum"; $dir="DESC";}
    $abfrage = "SELECT * from Termine ORDER BY $order $dir";
    $ergebnis = @mysql_query($abfrage); 
    // Solange nicht alle Datensätze aus der Tabelle durchlaufen wurde, läuft die Schleife
    while($row=@mysql_fetch_array($ergebnis))
    {                                                                                     
      // Wenn nun die aktuelle ausgelesene id eins größer ist, als die id des
    //Eintrags welcher gelöscht wurde, wird von dieser id
      // einer abgezogen
      if(($delid+1) == $row['id'])
      {
          $newid= $row['id']-1;
      }    
      // Diese neue id wird dann in die Datenbank eingetragen
      
    }/* while($row=@mysql_fetch_array($ergebnis)) */
    Also ich weiß nciht, wie ich die neue ID dann an den alten Platz schreiben kann.

    Gruß
    Sven

  • #2
    ein ID feld ist dazu da, einen datensatz auch eindeutig zuzuordnen. stelle dir vor du arbeitest mir weiteren tabellen, in denen die ID verwendet wird. willst du dann alle tabellen auch entsprechend ändern, du damit es für dich schöner aussieht?

    wenn du die ID dazu verwendest um den einträgen eine nummer voranzustellen, dann lassen einen zähler in PHP bei der ausgabe mitlaufen. ansonsten ist das totaler schwachsinn.

    aber damit du dann aus eigenen fehlern lernst ....

    Code:
    UPDATE tabelle SET id = id - 1 WHERE id > 5
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Hallo,

      klar, so rein funktional macht das ja nicht wirklich einen Sinn die ID's zu ändern. Nun gut. werde mir das dann trotzdem einfach mal anschuen und ein wenig rumprobieren. Kann man sicher trotzdem noch was dabei lernen.

      Vielen Dank.


      Gruß
      Sven

      Kommentar

      Lädt...
      X