Seite 1 von 1

Nächste verfügbare Kundennummer ermitteln ?!

Verfasst: 23.02.2006 09:39
von Condor
Hallo,

habe mal wieder ein kleines Problem und hoffe das ihr mir wieder helfen könnt. Und zwar:

Ich habe in einer DB eine Spalte namens "Kdnr" welche Kundennummern beinhaltet.

In einem Script kann ich jetzt einen neuen Kunden eintragen.
Wobei dann die nächst verfügbare Kundennummer genommen werden soll.
Wie kann ich das realisieren ?

Soll ich in der Spalte "Kdnr" die höchste Zahl heraussuchen und um 1 erhöhen ?
Geht das überhaupt so und wie schnell würde das überhaupt gehen wenn z.B. 30.000 oder mehr Kunden in der DB stehen ?

Mfg
Condor

Verfasst: 23.02.2006 10:12
von mr.no-name
Du kannst doch ein Feld der Tabelle auf auto-increment setzen.
Dann wird es bei jedem Eintrag um einen Wert erhöht (wie z.B. die User-IDs bei phpBB Foren etc)

Verfasst: 23.02.2006 10:14
von Condor
Hi,

die mögliche Kundennummer muss aber schon auf der Seite angezeigt werden bevor die Daten in der DB landen bzw. abgeschickt werden.

Auf der Seite wo ich den Kunden eintrage soll die mögliche Kundennumer schon stehen.
Erst danach werden die Sachen in die DB geschrieben.

Verfasst: 23.02.2006 11:41
von chriss713
Dann erzeug doch einen leeren Datensatz in der DB und lass Dir dessen ID als KundenNummer anzeigen. Danach trägst Du die restlichen Kundendaten ein und schreibst sie in die DB.

Verfasst: 23.02.2006 12:01
von Condor
Hi,

ich werde das jetzt so ähnlich machen.
Danke an euch.

Mfg
Condor

Verfasst: 23.02.2006 19:34
von PhilippK
Das Problem mit dem leeren Datensatz: wird der Einfügevorgang abgebrochen, so hast du eine Datensatzleiche über.
Daher folgender Weg: eine eigene Tabelle mit einem einzigen Feld, dass die nächste Kundennummer enthält (geht analog auch mit der letzten).

Wenn du das Erfassungsformular anzeigst, holst du dir aus der Tabelle die nächste Kundennummer und erhöhst die Nummer um 1 (Hinweis für Profis: idealerweise die zwei Vorgänge in eine Transaktion zusammenfassen und dabei einen Lock auf den Datensatz setzen). Beim Absenden prüfst du sicherheitshalber, ob die Kundennummer schon vorhanden ist (bei doppeltem Absenden usw.)

Gruß, Philipp

Verfasst: 23.02.2006 20:34
von chriss713
@PhilippK: Stimmt, ist besser.
Aber auch nur dann, wenn man die zwei Vorgänge wirklich in eine Transaktion zusammen fasst. Ansonsten könnte der Vorgang abbrechen, nachdem ein neuer Datensatz eingefügt wurde, jedoch bevor die Kundennummer in der extra Tabelle inkrementiert wurde... :wink:

Vielleicht sollte hier vor jedem einfügen eines neuen Datensatzes eine Plausibilitätsprüfung stattfinden?!

Verfasst: 23.02.2006 21:03
von PhilippK
Du inkrementierst erst, dann kommt das Formular und anschließend wird gespeichert. Da kann eigentlich zwischendrin nichts verlorgen gehen - kann halt nur eine Kundennummer unverwendet bleiben.

Gruß, Philipp

Verfasst: 24.02.2006 09:30
von Condor
Hallo,

ich habs jetzt so ungefähr gemacht.
Die "angeblich" neue Kundennummer wird bei mir in einer Temporären Tabelle gespeichert die nach jeden erfolgreichen Durchgang bzw. Abbruch durch den Benutzer geleert wird.

Wenn in der temporären Tabelle die neue Kundennummer steht holt er sich diese, erhört sie und trägt diese in die "wirkliche" Tabelle ein.

Steht in der temporären Tabelle keine neue Kundennummer geht er in die DB bzw. Tabelle der Kunden und prüft die nächste und schreibt diese wieder in die temporäre Tabelle.

Das war jetzt etwas theoretisch.
Das funktioniert bei mir zur Zeit ohne Probleme.

Mir ging es nur darum, wie lange es dauert wenn z.B. 50.000 Kunden in der Tabelle sind.
Aber das geht ziemlich zügig.

Trotzdem einen Dank an euch :grin: