mysql delete / insert problem



  • hi,
    habe da ein kleines problem.
    ich habe mir ein kleines news cms geschrieben und zwar so, dass man bestimmte einträge, per id editieren bzw löschen kann.

    nachdem ein eintrag gelöscht worden ist, soriere ich die ids neu, sodass keine lücke übrigbleibt. bis hier funktioniert alles einwandfrei.

    nur wenn ich nun einen neuen eintrag per insert into uws. erstelle, hängt es diesen nicht wie üblich an den schluss sondern, an die stelle wo davor gelöscht worden ist. (danach funktioniert es wieder ohne probleme).

    hat da vll. jemand von euch ne idee? wenns nicht verständlich war erläuter ichs gerne noch mal näher. 😉

    mfg Mindphreaker



  • Hast du eine Autoic-ID?

    Damit ich das richtig verstehe:
    Gegeben sind ID: 1 2 3 4 5
    Löscht du nun 3 ordnest Du 4 + 5 auf 3 + 4.

    Nun macht MySQL was?



  • nein, ich habe keine autoic-id
    ich les immer aus wie viele datensätze vorhanden sind und bestimme danach die id

    ich zeig das mal "graphisch"

    Daten | ID
    -----------
    test1 | 0
    test2 | 1
    test3 | 2
    test4 | 3
    test5 | 4

    nach löschen des zb. 3. eintrags und ID sortierung

    Daten | ID
    -----------
    test1 | 0
    test2 | 1
    test4 | 2
    test5 | 3

    beim erneuten eintragen kommt jetzt der fehler:

    Daten | ID
    -----------
    test1 | 0
    test2 | 1
    fehler| 4 << wird einfach dort wieder eingefügt.
    test4 | 2
    test5 | 3

    danach funktioniert es wieder einwandfrei, und die einträge werden hinten drangefügt.
    mfg Mindphreaker



  • Du solltest dein Design ändern. Um die letzte ID zu bestimmen brauchst du ein SELECT. Danach hast du die ID und zählst + 1. Diese neue ID verwendest duund schreibst sie. Was aber wenn 2 gleichzeitig das machen. Dabei bekommen bei die gleiche ID.

    Verwende ein AutoInc für sowas. Es sollte egal sein ob es der Reihe nach ist wenn du etwas löscht. Die ID ist eindeutig. SOmit kann man diese auch bearbeiten.

    Ein RDBMS erfordert IMMER einen eindeutigen Datensatzbezeichner.
    Deshalb gibt es den Primärschlüssel der in der Regl auch die AutoInc ist.

    Alles andere ist nicht Professionell.
    Du musst Dir also gedanken machen wie du ohne dein Design auskommst. Dies macht auch eine Datenbankprogrammierer/Designer aus. Einen Table kann jeder schnell erstellen aber für Design braucht man schon mehr.



  • ok,
    das mit den 2 usern die drauf zugreifen klingt einleuchtend, das war ne schlechte überlegung.

    allerdings dachte ich das autoinc so funktioniert, dass es beim anlegen des datensaetzes automatisch einen vordefinierten wert in einträgt. ersetzt autoinc das was ich umständlich dazuprogrammiert hab, und sucht sich den ersten freien wert?

    und ausserdem habe ich dann immer noch das problem mit der falschen reihenfolge, oder? sonst müsste ich bevor ich die datensätze ausgebe, sie jedes mal sortieren, und das ist dann auch nicht gerade proffisionell oder? 😕

    danke schonmal für deine hilfe.

    mfg Mindphreaker

    ps.: habe das ganze jetzt mal mit auto_encrement versucht. selber fehler. und zudem fügt auto_increment, nachdem ich was gelöscht hab, eine falsche id ein, weil es ja, jede id nur ienmal verwenden darf.
    wie kann ich das machen?

    ich brauche die reihenfolge damit ich unter jedem eintrag einen dynamischen link anlgegen kann, mithilfe dieses links spreche ich dann die datenbank an.


Anmelden zum Antworten