ichen: wenn leer id=1, wenn nicht =letzte_id+1?

Hi
wie kann ich feststellen, ob in einer Tabelle schon etwas drinsteht, oder nicht?

$result = mysql_query("select id from $tabelle ORDER BY id ASC LIMIT 1");
        while($row = mysql_fetch_array($result)) {
          if ($row["id"] == 0){
            $write_id = 1;
          } else {
            $write_id = $row["id"]+1;
          }
        }

Die Variable write_id soll dann in die Tabelle geschrieben werden. das problem ist, dass als erste write_id immer 0 eingetragen wird.

kann mir jemand helfen?

ichen

  1. Hallo,

    Die Variable write_id soll dann in die Tabelle geschrieben werden. das problem ist, dass als erste write_id immer 0 eingetragen wird.

    Du kannst beim erstellend er Tabelle deinem ID Feld die autoincrement Eigenschaft zuweisen, dann erledigt deine Datenbank das einfügen einer passenden ID für dich.

    Viele Grüße,

    Stefan

    1. Hi

      will ich aber nicht.
      wenn ich nun den neusten eintrag lösche (zB "2"), wird beim nächsten eintrag nicht wieder "2" eingetragen, sonderm "3", und es entsteht eine lücke, die eine unübersichtlichkeit schafft. deshalb probiere ich es anders.

      ichen

      1. Hiho,

        das ist jetzt nicht getestet sondern nur so eine idee. Kannst du nicht einfach mysql die Arbeit machen, so nach dem Motto SET id = MAX(id) + 1?
        Wie gesagt, ich hab keine Ahnung ob das geht, ist nur so ne Idee...

        Marc

        1. Hallo,

          das ist jetzt nicht getestet sondern nur so eine idee. Kannst du nicht einfach mysql die Arbeit machen, so nach dem Motto SET id = MAX(id) + 1?
          Wie gesagt, ich hab keine Ahnung ob das geht, ist nur so ne Idee...

          Die Idee ist schon richtig, prinzipiell geht das. (Wie mans syntaktisch ins SQL umsetzt, das kann der OP ja auch selber machen.) Allerdings löst das nicht das Problem von ichen:
          Wenn jetzt nämlich die Datensätze 1 bis 5 vorhanden sind und Nummer drei gelöscht wird, dann hat er mit dieser Methode einen neuen Datensatz Nummer 6 und eine Lücke an Stelle drei. Hilft also blos, wenn der neuste gelöscht wurde, dass da keine Lücke ensteht. Aber trotzdem kann es zu Lücken kommen.

          Viele Grüße,

          Stefan

          1. Hello,

            da musst Du hier mal unter den Stichworten "MySQL Lücken suchen" schauen. Ich hatte mal eine Demo dafür fertig gemacht.

            http://forum.de.selfhtml.org/archiv/2003/12/66446/#m379226

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      2. Hallo,

        wenn ich nun den neusten eintrag lösche (zB "2"), wird beim nächsten eintrag nicht wieder "2" eingetragen, sonderm "3", und es entsteht eine lücke, die eine unübersichtlichkeit schafft.

        IDs sind zum eindeutigen Erkennen von Einträgen und nicht um irgendeine Übersicht zu schaffen - lies mal http://www.dclp-faq.de/q/q-sql-ids.html. Wenn dir beim Ausgeben die Reihenfolge der IDs nicht gefällt, musst du eben eine zusätzliche Spalte (z.B. eine Zahl oder ein Datum) anlegen und nach der sortieren - aber nicht an der Eindeutigkeit der IDs rumpfuschen.

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hello Tobias,

          IDs sind zum eindeutigen Erkennen von Einträgen und nicht um irgendeine Übersicht zu schaffen - lies mal http://www.dclp-faq.de/q/q-sql-ids.html. Wenn dir beim Ausgeben die Reihenfolge der IDs nicht gefällt, musst du eben eine zusätzliche Spalte (z.B. eine Zahl oder ein Datum) anlegen und nach der sortieren - aber nicht an der Eindeutigkeit der IDs rumpfuschen.

          Was den Primärschlüssel betrifft, magst Du ja Recht haben. Aber Du verlagerst das Problem nur, und machst keinen konstruktiven Vorschlag, um den gewünschten Nummernkreis geschlossen zu halten. Ob es sinnvoll ist, freigewordene Plätze mit Neuzugängen aufzufüllen, stand nicht primär zur Debatte.

          Ich habe da z.B. immer noch das Problem, solche Lücken durch Aufrücken schließen zu wollen. Das Aufrücken soll aber durch ein einziges Statement erledigt werden, also typisch durch eine Update-Rechenoperation. Bin mir aber noch nicht klar, ob man da die Tabelle sperren muss oder nicht, denn eine vertikale Operation ist eigentlich immer transaktionspflichtig.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen