SQL: Spalte für Durchnummerierung?

3 Antworten

Das Problem ist ganz einfach. Du hast Dir ein System ausgedacht, das so nicht funktionieren kann. Du musst Dir ein anderes System ausdenken, eines das funktioniert. Das auto_increment ist für was ganz anderes gedacht, und dort funktioniert es auch.

Automatische Numerierungen kann man nur dort verwenden, wo man als Anwender nichts damit tun muss, also nur für datenbankinterne Verarbeitung.

Ich habe bei einem Kunden eine Datenbank mit 57 Tabellen und komplexen Verknüpfungen laufen. Und bei keiner einzigen gibt es eine automatische Nummerierung. Warum? Weil es kaum eine praktische Anwendung dafür gibt. Es wäre Sache des Informatikunterrichts auf die richtige Anwendung hinzuweisen.

Autoincrements haben eine strenge Monotonie, bis es zum warp around kommt, dann werden ggf. Werte wiederverwendet, wenn sie frei sind. Das ist erstmal das exakt gewünschte Verhalten.

Ich kann aber anhand Deiner Frage nicht erkennen wo denn nun Dein Problem liegen sollte: Der Primärschlüssel ist immer unique, sodaß eine Zuordnung kein Problem darstellen sollte.


kuribali 
Beitragsersteller
 13.10.2018, 20:32

Ich stelle die Daten in einer HTML Tabelle dar. Mit einem form action attribut übermittle ich die Daten per post an ein anderes Script. Die HTML Tabelle ist so generiert, dass der Name der einzelnen Inputfelder Spaltenname-IndexInDerTabelle ist. Jetzt gehe ich mit einer While Schleife durch alle Wert und aktualisiere per UPDATE die Werte in der Datenbank. Ich habe keine Möglichkeit gefunden, das ohne eine Spalte zu machen, die die Datenbank von Anfang an durchnummeriert.

0
KarlRanseierIII  13.10.2018, 20:37
@kuribali

Okay, wenn das Autoincrement Dein Schlüssel ist, dann numerierst Du in der Tabelle natürlich die Zeilen mit dem Autoincrement der bestehenden Datensätze durch. Dabei ist auch egal, ob es Lücken in der Folge gibt.

Wenn Du die IDs nicht dem Bearbeitenden visuell präsentieren möchtest, dann nimmst Du hierzu einfach ein hidden input und fertig ist die Laube. Einfaches iterieren über die Tupel des Forms mit Aktualisierung der DB ist dann kein Problem mehr.

0
kuribali 
Beitragsersteller
 13.10.2018, 21:51
@KarlRanseierIII

Danke, im Nachhinein wundere ich mich, dass ich nicht auf die Idee gekommen bin.

0
KarlRanseierIII  13.10.2018, 21:53
@kuribali

Du kannst ja sogar aus ästhetischen Gründen die Tabelle visuelle linear durchnumerieren. Der Nutzer muß ja nicht sehen, daß die Tupel eigentlich andere IDs haben, wenn das aus optischen Gründen so gewollt ist.

0
showgirl1  15.10.2018, 00:22
@kuribali

Meine Lösung:

gehe durch das _POST array mit foreach durch und prüfe den key mit substr auf den Feldname - wenn true aus dem key mit explode die DB Zeilen ID abspalten und schon hast du die Daten für deine Update Abfrage.

0

Einen eigenen Zähler einführen -- wenn eine Zaile gelöpscht wird, musst du halt deine Tabelle von "Hand" updaten, damit die "Lücke" gefüllt wird.


kuribali 
Beitragsersteller
 13.10.2018, 20:32

Und wie kann man so etwas mit PHP machen?

0
verreisterNutzer  13.10.2018, 20:37
@kuribali

In einer Schleife, die Ganze Tabelle von Anfang (ORDER BY myZaehler, damit von 1 bzw 0 angefangen wird)) an durchgehen, wenn eine Lücke entdeckt wird (Annnahme nur eine Zeile wurde gelöscht), ab der nächsten Zeile myZaehler durch myZaehler - 1 ersetzten.

(nur ein Vorschlag, gibt auch andere Möglichhkeiten -- ist aber immer aufwendig und eigentlich sinnlos, wie KarlRanseier sagt -- auch wenn du das Gegenteil meinst)

0