Automatisch generierte Kundennummer mit Buchstaben und Zahlen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Automatisch generierte Kundennummer mit Buchstaben und Zahlen?

    Hallo zusammen,

    ich habe ein Problem, bei dem ich mir allerdings nicht ganz sicher bin, ob es eher SQL oder PHP betrifft:

    Für eine Datenbank haben wir Kundennummern, die nach dem Schema HU 000.001 aufgebaut sind. Die ersten zwei Buchstaben stehen für den Standort, der Rest ist die fortlaufende Nummer für den jeweiligen Standort. Der nächste Kunde für den Standort sollte dementsprechend die Nummer HU 000.002 bekommen.

    Frage: Kann ich so etwas über MySQL automatisch generieren, ähnlich wie das bei reinen Integer-Werten mit auto_increment möglich ist? Wenn ja, wie?

    Falls nein, wie könnte ich so etwas sonst realisieren?

    Danke für eure Hilfe und viele Grüße
    Dan

  • #2
    Re: Automatisch generierte Kundennummer mit Buchstaben und Zahlen?

    mit auto_increment, nicht in der Art und Weise, nicht, aber du kannst doch einfach den Standort seperat speichern (eigene Spalte), dann kannste den auto_increment nur auf die Kundennummer-Spalte legen.....nur so als Idee ^^
    Bevor du dich ransetzt und ein Skript schreibst *schulter zuck*
    Ansonsten wird es ziemlich kompliziert IMO...vielleicht hat ja noch jemand ne Idee? *umschau*

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Danke schonmal!

      Mmh, das wäre dann eine extra Tabelle für jeden Standort, oder zumindest zwei Spalten für jeden Standort...
      Wäre eine Idee.

      Aber vielleicht hat ja jemand noch eine andere Idee?!

      VG
      Dan

      Kommentar


      • #4
        wie sollen die kundennummern denn aufgebaut sein?

        HU 000.001
        HU 000.002
        HU 000.003
        DA 000.004
        BE 000.005
        BE 000.006

        oder

        HU 000.001
        HU 000.002
        HU 000.003
        DA 000.001
        BE 000.001
        BE 000.002

        im 1. fall kannst du die nummern - wie ghostgambler vorgeschlagen hat - aufbauen. ansonsten musst du bei der eingabe erst die letzte nummer einer region holen und darauf eine neue kdnr aufbauen => string-funktionen, sprintf(). den zähler kannst du mit den sql-stringfunktionen holen. das kann nur nachteilig werden, wenn du einen kunden löschst.
        Kissolino.com

        Kommentar


        • #5
          @Wurzel:

          Danke schonmal!

          Der Aufbau soll wie im zweiten von dir genannten Beispiel sein. Jeder Standort bekommt seine eigenen von 0 beginnend durchnummerierten Kundennummern.

          Frage: Wenn ich Buchstaben in der Kundennummer habe, habe ich ja automatisch einen VARCHAR-Wert. Wie kann ich denn jetzt den Zahlenteil hinter den Buchstaben selektieren, um 1 erhöhen und dann wieder zu der Kundennummer passend zum Standort zusammenbauen?

          Sorry, dass ich Fragen muss, ist mir noch nicht ganz klar.

          Danke und viele Grüße
          Dan

          Kommentar


          • #6
            schau dir mal sql => SUBSTRING_INDEX() oder right()... im php dann in einen integerwert umwandeln => intval() ... das zerofill dann mit sprintf() ...
            Kissolino.com

            Kommentar


            • #7
              Original geschrieben von langerxxx
              Der Aufbau soll wie im zweiten von dir genannten Beispiel sein. Jeder Standort bekommt seine eigenen von 0 beginnend durchnummerierten Kundennummern.
              Du kannst ja dann theoretisch auch für jeden Standort eine eigene Tabelle anlegen, dann hast du das Problem mit der Spalte nicht, kannst den Auto_increment-Wert nutzen und du hast auch so einen besseren Überblick....

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                Original geschrieben von ghostgambler
                Du kannst ja dann theoretisch auch für jeden Standort eine eigene Tabelle anlegen, dann hast du das Problem mit der Spalte nicht, kannst den Auto_increment-Wert nutzen und du hast auch so einen besseren Überblick....
                Wäre zu umständlich! Dann lieber gleich eine Extra-Tabelle, in der jeder Standort einmalig mit dem letzten Wert eingetragen ist, und bei jedem neuen Kunde updaten.

                Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                sondern mit den Augen das Manual zu lesen.

                Kommentar


                • #9
                  und ich dachte immer, man kann in mysql zwei spalten einer tabelle als primärschlüssel definieren und eine der beiden spalten auto_increment verpassen...
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10

                    Kommentar


                    • #11
                      gell, ganz schön blöd von mir, das hätte er doch sicherlich gemacht
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Original geschrieben von mrhappiness
                        gell, ganz schön blöd von mir, das hätte er doch sicherlich gemacht
                        Sicher ganz schön blöd ... sicherlich hast Du Den Unterschied von Wurzels Beispielen nicht verstanden ... oder Du hast nicht verstanden, dass das 2. Beispiel korrekt war ...

                        Ich sehe nur 2 Alternativen ...

                        1. Die genannte mit einer Zusatztabelle (Prefix und letzter Wert) nicht schön ... aber notwendig wenn die Primärschlüssel immer eindeutig bleiben (Backup,Restore) ...

                        2. Ein aus 2 Attributen zusammengesetzter Primärschlüssel (Prefix, Index) ... ermitteln des Nächsten Wertes via SELECT IFNULL(MAX(key), 1) + 1 FROM tabelle WHERE prefix = 'BI'

                        Beide alternativen erfordern 2 Select .. also Raceconditions => Table locking nicht vergessen ...
                        carpe noctem

                        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                        Kommentar


                        • #13
                          Original geschrieben von goth
                          sicherlich hast Du Den Unterschied von Wurzels Beispielen nicht verstanden
                          doch
                          oder Du hast nicht verstanden, dass das 2. Beispiel korrekt war
                          doch

                          Zweites Beispiel:
                          HU 000.001
                          HU 000.002
                          HU 000.003
                          DA 000.001
                          BE 000.001
                          BE 000.002


                          Mein Vorschlag:
                          Code:
                          DROP TABLE IF EXISTS kunde;
                          CREATE TABLE kunde (
                            kunde_prefix varchar(30) NOT NULL default '',
                            kunde_nummer int(10) NOT NULL auto_increment,
                            PRIMARY KEY  (kunde_prefix,kunde_nummer)
                          ) TYPE=MyISAM;
                          
                          INSERT INTO kunde (kunde_prefix)
                          VALUES
                            ('HU'),
                            ('HU'),
                            ('HU'),
                            ('DA'),
                            ('BE'),
                            ('BE'),
                            ('HU');
                          Ausgabe von SELECT * FROM kunde (so sortiert, dass die Reihenfolge mit Wurzels Beispiel übereinstimmt):
                          Code:
                          +--------------+--------------+
                          | kunde_prefix | kunde_nummer |
                          +--------------+--------------+
                          | HU           |            1 |
                          | HU           |            2 |
                          | HU           |            3 |
                          | HU           |            4 |
                          | DA           |            1 |
                          | BE           |            1 |
                          | BE           |            2 |
                          +--------------+--------------+
                          Ich denke, dass so je Prefix fortlaufend nummeriert wird und das war ja gewünscht oder?
                          Zuletzt geändert von mrhappiness; 25.11.2004, 08:24.
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            Original geschrieben von mrhappiness
                            PRIMARY KEY ([color=red]kunde_name[/color],kunde_nummer)
                            mach doch da noch ein kunde_prefix draus, dann funktioniert's auch.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              das war die aufgabe für's aufgeweckte kind...

                              hatte vorher kunde_name und mir dann spontan wie ich bin gedacht, kunde_prefix wäre je eventuell besser


                              danke, ist korrigiert
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X