steffen: Nächste freie ID (auto_increment)

Hallo Forumleser,

ich habe eine Spalte 'ID' auto_increment und möchte jedoch wenn möglich die erste freie ID belegen. Das heisst wenn es 1 2 3 5 6 8 gibt soll als nächstes die ID 4 und 7 genutzt werden.

Wie kann ich das realisieren? Auch wenn viele Sagen man soll das nicht machen, wär das in meinem Fall doch sehr relevant.

mfg steffen

  1. Hi,

    ich habe eine Spalte 'ID' auto_increment und möchte jedoch wenn möglich die erste freie ID belegen.

    dieses Vorhaben bleibt Unfug, egal wie oft es gefragt wird.

    Auch wenn viele Sagen man soll das nicht machen, wär das in meinem Fall doch sehr relevant.

    Warum?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Warum?

      Cheatah

      Weil ich aus den IDs die verschienen IPs berechne und die gelöschten IPs wieder belegt werden sollen.

      mfg

      1. Weil ich aus den IDs die verschienen IPs berechne und die gelöschten IPs wieder belegt werden sollen.

        das versteh ich nicht - warum gibts dann eine id? warum ist nicht die ip der primärschlüssel?

        für sowas ist dann übrigens ON DUPLICATE KEY UPDATE ganz praktisch

        1. das versteh ich nicht - warum gibts dann eine id? warum ist nicht die ip der primärschlüssel?

          Weil es in der DB keine IP selber drinsteht, sondern wird mit der ID errechnet.

          mfg

          1. Hello,

            Weil es in der DB keine IP selber drinsteht, sondern wird mit der ID errechnet.

            <gebetsmühle>
            Die ID (AutoIncrement) dient AUSSCHLIEßLICH zur Identifikation eines Datensatzes, sie hat keine inhaltliche Bedeutung. Wenn du inhaltliche Bedeutung möchtest, dann verwende hierfür eine entsprechende Spalte die du kontrollierst und wenn es mit einem Trigger ist, damit du dich nicht drum kümmern musst.
            </gebetsmühle>

            MfG
            Rouven

            --
            -------------------
            sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
            Wenn du die Nadel im Heuhaufen nicht findest, zünde den Heuhaufen an.
            1. <gebetsmühle>
              Die ID (AutoIncrement) dient AUSSCHLIEßLICH zur Identifikation eines »» Datensatzes, sie hat keine inhaltliche Bedeutung. Wenn du inhaltliche Bedeutung möchtest, dann verwende hierfür eine entsprechende Spalte die du kontrollierst und wenn es mit einem Trigger ist, damit du dich nicht drum kümmern musst.

              Das heisst, dass ich fast 2 gleiche Spalten habe.

              Okay nehmen wir mal an, dass ich nun die 2 Spalte habe, dann wär wieder meine Frage wie ich nun rausbekomme, was die Nächste freie hochgezählte IP wäre ..

              steffen

              1. Okay nehmen wir mal an, dass ich nun die 2 Spalte habe, dann wär wieder meine Frage wie ich nun rausbekomme, was die Nächste freie hochgezählte IP wäre ..

                die frage ist in erster linie: wie zählst du eine ip hoch? wie herum schreibst du sie? schreibst du sie überhaupt in 4 durch punkte getrennte dezimalzahlen?

                1. Okay nehmen wir mal an, dass ich nun die 2 Spalte habe, dann wär wieder meine Frage wie ich nun rausbekomme, was die Nächste freie hochgezählte IP wäre ..

                  die frage ist in erster linie: wie zählst du eine ip hoch? wie herum schreibst du sie? schreibst du sie überhaupt in 4 durch punkte getrennte dezimalzahlen?

                  Hallo,
                  jeder User bekommt 64 IPs. Deshalb habe ich einfach die IDs genommen und errechne mir den Rest.

                  mfg steffen

                  1. SELECT a.id+1 AS id FROM idtable a LEFT JOIN idtable b ON (a.id+1)=(b.id) WHERE isNull(b.id) ORDER BY a.id LIMIT 1

                    So klappt es :P

              2. Hallo,

                Das heisst, dass ich fast 2 gleiche Spalten habe.

                nein. Alles andere als gleich.

                Okay nehmen wir mal an, dass ich nun die 2 Spalte habe, dann wär wieder meine Frage wie ich nun rausbekomme, was die Nächste freie hochgezählte IP wäre ..

                Das hängt ganz sicher davon ab, was Du unter der "nächsten freien IP" verstehst.
                Unter der Voraussetzung, dass Du den Dezimalwert des letzten Oktetts meinst, könntest Du eine Tabelle mit den Werten von 1 bis 254 füllen (0 und 255 fielen bei mir weg) und den kleinsten Wert ermitteln, der *nicht* in der Liste der vergebenen IP-Adressen steht.

                Ach übrigens: welches Datenbankmanagementsystem (DB2, dBase, FireBird, FoxPro, Jet-Engine, Informix, MS SQL-Server, MySQL, Oracle, PostgreSQL, SQLite, ...) in welcher Version verwendest Du?

                Freundliche Grüße

                Vinzenz

                1. Ach übrigens: welches Datenbankmanagementsystem (DB2, dBase, FireBird, FoxPro, Jet-Engine, Informix, MS SQL-Server, MySQL, Oracle, PostgreSQL, SQLite, ...) in welcher Version verwendest Du?

                  MySQL

                  steffen

      2. Hi,

        Weil ich aus den IDs die verschienen IPs berechne und die gelöschten IPs wieder belegt werden sollen.

        ein IDentifier hat *exakt* eine Aufgabe: die eindeutige IDentifizierbarkeit zu gewährleisten. *Alles* was darüber hinausgeht ist ein schwerwiegender Fehler.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes