autoincrement

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

  • autoincrement

    Hi,

    habe folgendes Problem:

    Ich lass meine Einträge im Guestbook per Autoincrement nummerieren. Das passt alles super, nur wenn ich einen Eintrag lösche, dann zählt des au. trotzdem mit der nächsten Zahl weiter, also überspringt eine!

    Kann man das irgendwie übergehen, ohne jedesmal die ganze Tabelle neu zu ordnen?
    Zuletzt geändert von Damian1984; 12.05.2003, 20:54.
    Für Rechtschreibfehler übernehme ich keine Haftung!

  • #2
    nein

    Kommentar


    • #3
      Irgendwie würd's auch den Sinn eine Auto Increments konterkarieren ... oder?
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        und wenn Du eh nach den autom. Ids sortierst, wo ist das Problem wenn ein paar fehlen

        Oder willst Du aus irgendeinem Grund der mir nicht bekannt ist, wirklich jede Zahl benutzen und die (durch Löschen) freigewordenen wieder verwenden?

        Kommentar


        • #5
          So hier passt das wohl am besten rein.

          Ich benötige Hilfe da mir diese Hirnakrobatik langsam Kopfschmerzen bereitet.

          Folgendes Problem.
          Ich habe eine Tabelle mit folgenden Feldern:

          ID , Nummerrierung, host, type name, change.usw.

          Die Tabelle ist eine Arte Untertabelle einer anderen d.H.
          Die ID ist der indirekte Primärschlüssel.

          An hand der ID (die kann mehrmals vorkommen) kann ich die einträge der anderen Tabelle und somit dem Besitzter zuordnen. Dann gibt es eine Durchlaufende nummer die von 1 beginnen soll und bis zum ende seiner Eintäge läuft. Nun das Problem:
          Ich habe eine Delete Verzweigung wo hinter den Einträgen Checkboxen sind die wenn sie Angeharkt sind den Eintrag z.B Nummer 4 löschen.
          Nun möchte ich aber das die Nummerrierung neu erfolgt sprich die 4 nicht leer ist sondern die 5 auf 4 rückt...
          Wie mache ich das ?


          PHP-Code:
          $loeschen count($eintragsnummer); // Das ist der Array mit der Nummerierung


          $db mysql_connect($dbserver,$dbuser,$dbpw);

          for (
          $i=0;$i<$loeschen;$i++)
          {
          $renumber $renumber 1;
          echo 
          "Checkboxen: $delete[$i]<br>"// Das ist der Array der von den Checkboxen kommt
              
          if ($delete[$i])
              {
                      
          $query mysql_db_query($dbase,"INSERT INTO `deleted_zonefile_body` (`id`, `eintragsnummer`, `host`, `recordtype`, `mail_prio`, `adress`,`changedby`, `last_change`, `filename`, `loader`) 
                                                                                   VALUES ('
          $pri_id', '$delete[$i]', '$host[$i]', '$record[$i]', '$prio[$i]', '$adress[$i]', '$session_user',NOW(), 'pri.$Selection', '')");                                
                      
          $query mysql_db_query($dbase,"DELETE FROM `zonefile_body` WHERE `id`='$pri_id' AND `eintragsnummer`='$delete[$i]' AND `host`='$host[$i]' AND `recordtype`='$record[$i]' AND `mail_prio`='$prio[$i]' AND `adress`='$adress[$i]' AND `changedby`='$session_user' AND `filename`='pri.$domainname' AND `loader` ='' LIMIT 1");
                      echo 
          "<b>Eintrag Nummer $delete[$i] gelöscht<b><br>";
                      
              }
              if (
          $delete[$i]=="")  // HIER IST MEIN PROBLEM
              
          {
              
          $query mysql_db_query($dbase,"UPDATE `zonefile_body` SET eintragsnummer='$renumber' WHERE `id`='$pri_id' AND host='$host[$i]' AND recordtype='record[$i]' AND `adress`='$adress[$i]'");
              echo 
          "$i : UPDATE `zonefile_body` SET eintragsnummer='$renumber' WHERE `id`='$pri_id' AND host='$host[$i]' AND recordtype='record[$i]' AND `adress`='$adress[$i]'<br><br>";
              }

          Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
          www.d-creationz.de

          Kommentar


          • #6
            indem du ein update machst bei dem du du den wert in deiner primärschlüsselspalte um 1 verringerst, und zwar überall da, wo der wert größer ist, als der den du gelöscht hast?

            aber dann hast du vorher: 1 2 3 4 5 6
            löschen: 1 2 3 5 6
            update: 1 2 3 4 5

            neuen datensatz einfügen: 1 2 3 4 5 7

            musst das also immer wieder machen

            gewöhn dir doch einfach an, en primärschlüssel "einfach so zu haben", also ihm keine inhaltliche bedeutung zuzuweisen
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Am besten ist in diesem Fall, man nimmt das "autoincrement" raus und ermittelt die höchste gerade vergebene ID, und vergibt folglich die nächste.
              Oder man vergibt die ID in Form der Unix Time.

              Kommentar


              • #8
                Original geschrieben von mrhappiness
                indem du ein update machst bei dem du du den wert in deiner primärschlüsselspalte um 1 verringerst, und zwar überall da, wo der wert größer ist, als der den du gelöscht hast?

                ok ! Das Problem ist das ich keine primärschlüsselspalte habe also muss ich zwangslüfig eine anlegen.... ok so weit so gut. Problem ich kann keine Durchlaufende auto Nummeriereng als P-Key benutzen um die Nummerierung sprich deinen vorschlag key -1 zu schreiben.

                es kann fuer die ID 2 die nummern 1,2,3,4,5,6,7 vorkommen und fuer die ID 4 auch 1,2,3,4,5 Insofern muss ich die Nummerierungsspalte eins verrringern. ok.


                Original geschrieben von mrhappiness
                aber dann hast du vorher: 1 2 3 4 5 6
                löschen: 1 2 3 5 6
                update: 1 2 3 4 5
                das will ich =)


                neuen datensatz einfügen: 1 2 3 4 5 7

                musst das also immer wieder machen

                gewöhn dir doch einfach an, en primärschlüssel "einfach so zu haben", also ihm keine inhaltliche bedeutung zuzuweisen

                ok das mache ich. Ich habe in meinem Update Statement naemlich das Problem das ich nicht an den richtigen Eintrag komme u.U. da es auch ein Doppeleintrag geben kann. Ich denke ich mache eine Neue Spalte als P-Key mit auto_inc dann kann ich die eintrage auch direkt zuorden...


                also danke schonmal fuer die Antwort. Bin natürlich fuer weitere Antworten Lösungen offen

                thx
                Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
                www.d-creationz.de

                Kommentar


                • #9
                  Original geschrieben von Guido
                  Am besten ist in diesem Fall, man nimmt das "autoincrement" raus und ermittelt die höchste gerade vergebene ID, und vergibt folglich die nächste.
                  Oder man vergibt die ID in Form der Unix Time.
                  Hi ! Ich habe garkein autoincrement.

                  Die Nummerierung der einträge schreibe ich mit dem Zähler der Schleife.
                  Aber das mit dem ermittel der Zahl ist auch nicht so leicht! da wenn 5 leer ist ja die 6 die höchste Zahl sein kann. Ich Glaube mein Ansatz wie ich die Tabelle aufgebaut habe ist schon verkehrt.
                  Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
                  www.d-creationz.de

                  Kommentar


                  • #10
                    du hast keinen primärschlüssel?

                    dann aber schnell einen anlegen, und nicht vergessen: _keine_ inhaltliche bedeutung!

                    wenn ich dich jetzt richtig verstanden hab, hast du ne spalte ID, die aber auf den primärschlüssel einer anderen tabelle referenziert?
                    wenn dem so ist, würd ich da eh kein update machen um lücken zu entfernen, da du dann ja diese andere tabelle auch updaten musst
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      Also wie soll ich es ausdruecken...

                      Nein ich habe keinen ! Die ID ist ein Pri-Schüssel einer anderen Tabelle. z.B. die Domain d-creationz.de hat die ID 20.
                      Die Oben erklärte Tabelle ist das dazugehörige Zonefile für die Tabelle. Sie kann beliebig viele einträge habe. Gehe ich nun in die DNS Verwaltung dann liest er die Domaintabelle aus und an hand der ID (20) suche ich in der Zonefile Tabelle alle einträge mit der ID 20. und hier muss ich nun die anzahl der Eintrage in einer Nummerieung haben da ich mit der DNS-Verwaltung auch das Zoneflie erstelle das dan per SecureCopy auf den Nameserver geschoben wird.
                      Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
                      www.d-creationz.de

                      Kommentar


                      • #12
                        Original geschrieben von reaVen
                        Ich habe garkein autoincrement.
                        warum hast du dann den thread-titel so gewählt ...?
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          OffTopic:
                          War ja klar das von dir so was kommt....
                          weil es wie im ersten post beschrieben ist um eine lücke in einer autonummerierung geht ! ich haette natürlich ein neues thread aufmachen koennen aber dann haettest du auch deinen senf dazugegeben.... wie man es macht dem herr WAHRSAGA kann man es nicht recht machen.
                          Musst du eigenltich zu jedem thread rumflamen anstatt ne Lösung zu posten... ? naja egal

                          Ein blue screen ist nicht immer was schlimmes... es hängt nur davon ab wo er zu sehen ist !
                          www.d-creationz.de

                          Kommentar


                          • #14
                            -
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar

                            Lädt...
                            X