Problem mit Auto_Increment

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

  • Problem mit Auto_Increment

    Hi,
    also ich bin dabei Scripts für downloadberreiche, News, benutzer usw zu erstellen. Um sie eindeutig identifizieren zu können, bekommen sie IDs. Die IDs sollen über Auto Increment in der MySQL-Tabelle automatisch hoch gezählt werden.

    Bei der Abfrage der einträge, lasse ich zunächst die Anzahl der Einträge zählen.

    PHP-Code:
    $anzahl "SELECT id from $tabtime";
    $anzahl mysql_query($anzahl);
    $anzahl mysql_num_rows($anzahl);
    $anzahl $anzahl;

    $i 1
    While(
    $i<$anzahl)
    {

    $ausgabe mysql_query("SELECT headline from $tabtime WHERE id='$i'");
    $ausgabe mysql_fetch_array($ausgabe);
    echo 
    $ausgabe;

    So, wenn die IDs, jetzt so, 1, 2, 3, 4, 5, 6.... hoch gehen, is das kein problem. Aber wenn ich einen Newseintrag lösche, wird ja auch die ID gelöscht, aber der nächste eintrag bleibt, es entsteht also ein lücke. Wenn ich also z.B. den eintrag NR 3 lösche, is da nur noch 1,2,4,5,6. Jetzt hab ich also 5 Einträge, aber die IDs werden bis 6 hoch gezählt. $anzahl is also jetzt 5 und der letze eintrag wird nich mehr angezeigt. Gibt es eine elegante methode um das zu lösen? Mir sind z.T. schon ein paar sachen eingefallen, z.B.
    PHP-Code:
    $anzahl $anzahl $b
    wobei $b immer wenn ich einen eintrag lösche um 1 erhöt wird. Wenn dann der eintrag nr 3 kommt, wir halt geprüft ob was drinne is und wenn nich übersprungen. Aber das ist irgendwie nicht so das wahre...

    Schon mal danke für Antworten im Vorraus.

    SWiSH

  • #2
    Code:
    SELECT MAX(`id`) FROM tabelle ... // ist 6
    SELECT COUNT(*) FROM tabelle ... // ist 5

    Kommentar


    • #3
      Hallo,

      wenn ich richtig verstehe was du erreichen willst, dann darfst du dein ID-Feld nicht Auto-increment setzen, weil hier jede ID nur ein einziges Mal vergeben wird. Wenn du also den Eintrag mit der ID 3 löschst bekommst du bei einem Auto-increment Feld diesen Wert nicht wieder in deine Tabelle.

      Du müsstest für ID ein normales INT-Feld vergeben und die Vergabe der Nummern selbst 'managen', also nach einem Delete ein Update der Spalte ID ausführen um wieder fortlaufend aufsteigende Nummern zu erhalten. Allerdings ist dann nicht gewährleistet das die ursprüngliche Reihenfolge der Datensätze auf Dauer erhalten bleibt. Hierfür wäre eine Timestamp-Spalte aber die Lösung.

      Gruss
      Quetschi

      EDIT:
      Hab erst jetzt deinen Code überflogen und verstehe deine Vorgehensweise nun nicht so recht.

      Warum ermittelst du zuerst die Anzahl der Einträge in deiner Tabelle, lässt dann für die Anzahl der Einträge eine Schleife laufen die dir dann jeden Datensatz einzeln rausholt und verwendest dann zur Abfrage den Zähler ($i) deiner Schleife? Dadurch ist bei einer Löschung dein Problem ja quasi hausgemacht. Das hier sollte das gewünschte Resultat liefern:

      PHP-Code:
      <?php

      $ausgabe 
      mysql_query("SELECT headline from $tabtime ORDER BY id");

      while(
      $row mysql_fetch_array($ausgabe))
      {
          
      var_dump($row);
      }

       
      ?>
      Zuletzt geändert von Quetschi; 10.07.2005, 18:33.
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar


      • #4
        ok, dann werde ich es denke ich über timestamp machen. Mal sehen wie das funktioniert. Danke. Wenn ich noch fragen hab meld ich mich dann nochma.

        Kommentar

        Lädt...
        X