Nächste verfügbare Kundennummer ermitteln ?!

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Nächste verfügbare Kundennummer ermitteln ?!

Beitrag 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
mr.no-name
Mitglied
Beiträge: 1883
Registriert: 20.10.2003 12:07
Wohnort: Hannover

Beitrag 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)
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag 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.
Benutzeravatar
chriss713
Mitglied
Beiträge: 229
Registriert: 06.06.2005 14:06

Beitrag 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.
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag von Condor »

Hi,

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

Mfg
Condor
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
chriss713
Mitglied
Beiträge: 229
Registriert: 06.06.2005 14:06

Beitrag 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?!
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag 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:
Antworten

Zurück zu „Coding & Technik“