14. Juni 201015 j Hallo zusammen, ich bin Hobbyprogrammierer und mache mich gerade an eine datenbankgestützte Webseite. Dabei habe ich eine Seite, die alle Elemente einer DB-Tabelle sortiert nach ID ausgibt. Das ID-Feld ist autoincrement. Mein Problem ist, dass, wenn man über die Webseite ein Element löscht und anschließend ein neues hinzufügt, dieses Element die ID des vorher gelöschten bekommt, also nicht hinten angehängt wird. Das ist eigentlich logisch, ist für den Benutzer aber eher gewöhnungsbedürftig, da er sein neu erstelltes Element in einer Liste von vielen suchen müsste. Gibt es für das Problem eine gängige Abhilfe? Alle Elemente per Update ändern, falls eins gelöscht wurde, halte ich für nicht praktikabel. MfG gorgel
14. Juni 201015 j Hallo gorgel, könntest Du noch etwas mehr Infos (Datenbankmanagementsystem, Programmiersprache, ...) geben, sonst ist das nicht nachvollziehbar... tsg
14. Juni 201015 j Bei MySQL ist es so, dass der auto_increment-Wert immer inkrementiert wird und nicht mehr einen Wert unter dem jetzigen Wert annehmen kann. Wenn ich bei mir drei Datensätze mit "ID" als auto_increment erzeuge, dann werden in die Spalte "ID" die Werte 1, 2, 3 gepackt. Wird jetzt bspw. der zweite Datensatz gelöscht, wird trotzdem beim nächsten Einfügen eine 4 in die ID-Spalte geschrieben.
14. Juni 201015 j Tatsächlich? Also ich bastel an einer JSF-Seite mit MySQL-Datenbank. Dann verstehe ich nicht, wonach die Seite sortiert. Die entsprechende Tabelle ist ganz simpel aufgebaut: 1. ID auto_increment 2. Text Per JPA hole ich mir alle vorhandenen Texte aus der Tabelle. Komischerweise, wie gesagt, ersetzt ein neu erstellter Text immer den vorher gelöschten Platz. Aber wenn dies eigentlich nicht der Fall ist, liegt es wohl an meinen bescheidenen JPA-Künsten. Ich werde nochmal drüberschauen. Danke für eure Antworten bis hierhin!
14. Juni 201015 j Wenn du die Datensätze in einer bestimmten Reihenfolge haben willst, dann musst du dafür sorgen, dass die Datensätze ein Feld haben, das bei Sortierung eben diese Reihenfolge erzeugt. Keinesfalls solltest du dich darauf verlassen, dass dir die Datenbank die Datensätze in der Reihenfolge der Erzeugung liefert, oder das ID-Feld für die Sortierung benutzen.
14. Juni 201015 j Ok, dann erstelle ich einfach ein weitere INT-Feld, das immer den Wert des höchsten vorhandenen Wertes + 1 bekommt, sobald ein neues Element hinzugefügt wird. Bzw. wenn kein Wert vorhanden ist, den Wert 0 verwendet. Danke, so sollte es gehen!
14. Juni 201015 j Keinesfalls solltest du dich darauf verlassen, dass dir die Datenbank die Datensätze in der Reihenfolge der Erzeugung liefert, oder das ID-Feld für die Sortierung benutzen. Hm. Wieso dass nicht? Gibt es da denn so krasse Unterschiede? Funktioniert das auto_increment nicht genau wie eine Sequenz mit Startwert 0?
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.