Tina: Counter in DB

Hallo
ich habe folgendes Problem.
Der Benutzer meines späteren Programmes ht jetzt schon die Möglichkeit einträge über einen PHP Screen in eine Datenbank einzufügen. Nun brauche ich eine Art Counter der immer ein hochzählt wenn ein Eintrag hinzuhkommt. In der Datenbank soll es so aussehn.

Eintrag   Counter
Test1        1
Test2        2
Test3        3

Außerdem hat der User die Möglichkeit Einträge wieder zu löschen, löscht er jetzt einen Eintrag z.b Test 2 Soll der Counter neu hochzählen. Und die Datenbank aktualisiert werden

Eintrag   Counter
Test1        1
Test3        2

Wie kann ich das machen. Das der Counter sich mit verändert. Bitte beachtet ich bin nicht so der Profi in PHP und MySQL.
Trotzdem vielen Dank ich hoffe auf eure Hilfe
Tina

  1. Hallo
    ich habe folgendes Problem.
    Der Benutzer meines späteren Programmes ht jetzt schon die Möglichkeit einträge über einen PHP Screen in eine Datenbank einzufügen. Nun brauche ich eine Art Counter der immer ein hochzählt wenn ein Eintrag hinzuhkommt. In der Datenbank soll es so aussehn.

    hallo,

    benutze einfach auto_increment und primärschlüssel, damit wird bei jedem eintrag in deiner table der wert um eins erhöht und erhält eine eindeutige ID.

    Warum willst nach dem löschen den wert count ändern, welchen zweck hat das ?

    1. Danke aber das reicht leider nicht. Es dürfen keine Lücken in der DB entstehen.

      Der Couter soll eigendlich eine Positions ID sein.
      Die mir die eindeutige Stelle verrät.
      Es muss doch irgendwie möglich sein ?????
      Gruss
      Tina

      1. Hi,

        Danke aber das reicht leider nicht. Es dürfen keine Lücken in der DB entstehen.

        Warum sollen keine lücken entstehen dürfen?

        MfG

        1. Die Einträge auf dem Screen sollen anschließend mit Pfeilen tauschbar sein.

          Also Eintrag 1 soll mit Eintrag 2 tauschbar sein usw...
          Das dumme ist nur (das Problem hatte hier wohl schon mal eine hier)
          Die Einträge sollen nicht nur auf dem Screen sondern auch in der Datenbank vertauscht werden.

          Versteht einer mein Problem, es läuft quasi darauf hinaus, dass ich nicht weiß wie ich dieses tauschen machen soll.

          Und ich dachte mir ich könnte mit meinem Couter die Position bestimmen.
          Und um das zu machen muss dieser Lückenlos sein.

          Tina

          1. Hi,

            Und ich dachte mir ich könnte mit meinem Couter die Position bestimmen.
            Und um das zu machen muss dieser Lückenlos sein.

            nein muss er nicht, nicht wenn du "vernüftigen" code produzierst.
            allerdings reicht da die ID nicht aus. da solltest du wirklich noch eine
            zweite spalte haben und da empfiehlt sich der tip von friction

            MfG

            1. Tut mir leid aber ich komme mit dem Tip von friction nicht so ganz weiter.
              Hat denn keiner sowas schon mal programmiert wo man die Einträge auf dem Screen und gleichzeitig in der Datenbank verschieben kann.
              Ich bekomme das einfach nicht hin sitze hier schon 2 Tage dran. So ein mist.
              Tina

              1. Hallo Tina,

                Hat denn keiner sowas schon mal programmiert wo man die Einträge auf dem Screen und gleichzeitig in der Datenbank verschieben kann.

                wieso willst du die Datensätze in der Datenbank verschieben - lass doch die IDs in Ruhe und änder nur das Feld ord (bei mir heißt es immer "sort", aber das ist ja egal). Beim auslesen verwendest du dann einfach "ORDER BY ord" und schon ist es alles richtig sortiert, ohne die IDs anzufassen.

                Grüße aus Nürnberg
                Tobias

              2. Hi,
                also du hast ja eine tabelle
                ----------------------------------
                | ID | ORD | titel | eintrag | ...
                ----------------------------------
                |  1 |  1  | asdf  | asdfasd | ...
                ----------------------------------
                |  2 |  3  | adfa  | asfeqwd | ...
                ----------------------------------
                |  3 |  2  | adfg  | aersdfg | ...
                ----------------------------------
                .....

                du machst bei hinzufügen ein insert und setzte für alles den wert
                außer für ID und ORD. ORD darf NULL sein ID ist der PrimKey und hat
                AutoIncrement. nach dem INSERT also
                $sql = "INSERT INTO tabelle ...
                mysql_query($sql);
                holst du dir die ID
                $last_insert_id=mysql_insert_id();
                und updates die spalte ORD. wenn du die daten ausgeben willst machst
                du ORDER BY ORD und machst dort verweise auf dein script wo du die
                position nach oben oder nach unten verschieben kannst. an dieses
                script lieferst du die ID des Datensatzes und machst ORD so hoch bzw.
                niedrig das er an der position des nachfolgenden oder vorhergehenden
                elementes ist und bei diesem den ORD wert dementsprechend niedriger
                oder höher. also quasi einfach ein tausch des ORD wertes das sind 2
                UPDATEs und vorher noch 1/2 SELECTs. ich an deiner stelle würde der
                einfachheit halber erstmal eins zum hochsetzt und danach eins zu
                runtersetzten machen, zumindest 2 seperate scripte.

                MfG

      2. Danke aber das reicht leider nicht. Es dürfen keine Lücken in der DB entstehen.

        also du benutzt count um die reihenfolge zu steuern.

        ich benutzte dafür immer ein Feld ID und eine feld ORD.

        Nachdem ich ein Insert gemacht habe mache ich direkt eine Update:

        //funktion zur Abfrage der letzten ID nach dem INSERT
        $last_insert_id=mysql_insert_id();

        //DANN eine Update dieser table
        $q="UPDATE table SET ord='$last_insert_id' WHERE id='$last_insert_id' ";
        mysql_query($q);

        dann enthält dein Feld ORD den gleichen wert wie deine ID.
        Und wenn dazwischen was löschst ändert da nicht an der reihenfolge

  2. hi,

    Nun brauche ich eine Art Counter der immer ein hochzählt wenn ein Eintrag hinzuhkommt.

    wozu? würde es nicht ausreichen, wenn du dir dynamisch per abfrage die aktuelle anzahl zusürckgeben lassen würdest?

    stichwort: COUNT()

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hi,
    was willst du mit diesem counter bezwecken? evt. hilft dir das hier
    weiter http://dev.mysql.com/doc/mysql/de/counting-rows.html

    MfG

  4. yo,

    wie bereits mehrfach erwähnt wurde geht das nicht über die ID des datensatzes zu lösen. eine tabelle ist eine unsortierte menge und man muss sich schon was einfallen lassen, um eine sortierung reinzubekommen.

    Wie kann ich das machen. Das der Counter sich mit verändert.

    der Counter verändert sich nur, wenn er nicht in der datenbank mit eingetragen wird, sondern bei der ausgabe. das klingt auf den ersten blick ein wenig verwirrend, sollte aber deine dynamik erzeugen können. zusätzlich brauchst du noch eine weitere spalte, welche die ordnung reinbringt, wie ebenfalls schon mehrfach erwähnt wurde. wenn die datensatze alle nacheinander eingefügt werden und das das kriterium für die reihenfolge ist, dann empfehle ich dir eine spalte mit dem datum/uhrzeit mit aufzunehmen. diese spalte kann dann für die ORDER BY klausel herangezogen werden. folgend ein beispiel, wie es funktioniert.

    ID, Test1, Datum 1
    ID, Test2, Datum 2
    ID, Test3, Datum 3

    Die abfrage dafür würde lauten.

    SELECT ID, Eintrag FROM tabelle ORDER BY Datum

    wie gesagt musst du nun noch den Counter reinbringen. dass geht entweder über PHP, indem du dort eine variable deklarierst, die bei 1 startet und sich nach jeder ausgabe eines datensatzes um 1 erhöht. oder aber du deklarierst eine variable in mysql und baust die viariable in die abfrage mit ein. das ist ein wenig komplizierter.

    fällt nun einer der datensätze weg, sortiert er automatisch nach dem datum und der counter passt sich auch an.

    Ilja

    1. yo,

      nochmal zur besseren erklärung, warum der counter ausserhalb der datenbank erzeugt werden muss, egal ob nun in php oder bei der abfrage in mysql. würde sich der counter bei jeden datensatz in der tabelle befinden und ein datensatz irgendwo gelöscht werden, dann müsste man alle nachfolgenden datensätze mit verändern. das wäre der arbeit zuviel. deshalb den counter dynamisch ausserhalb der datenbank erzeugen lassen.

      Ilja