Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Fortlaufende Nummer durch Anzahl in einer anderen Spalte

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Dropout, 13 Januar 2017.

  1. Dropout

    Dropout Neuer Benutzer

    Folgendes Problem:
    Eine mysql Tabelle mit mehreren Spalten.
    In einer Spalte wird durch ein Formular die Anzahl für gewünschte Gutscheine vergeben.
    Wie bekomme ich es hin, das automatisch in einer anderen Spalte ebenso viele Nummern vergeben werden?
    Und dann auch noch fortlaufend pro Kunde?

    Beispiel:
    Kunde A / Anzahl 4 / Gutscheinnummer 01, 02, 03, 04
    Kunde B / Anzahl 2 / Gutscheinnummer 05, 06
    Kunde C / Anzahl 3 / Gutscheinnummer 07, 08, 09
    usw.

    Bin für jeden Vorschlag dankbar...
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Mit MySQL wird das, ähm, sportlich. Mal eine grundlegende Idee mit PostgreSQL:

    Code:
    test=*# select * from dropout ;
      kunde  | anzahl | nummern
    ---------+--------+---------
     Kunde A |  4 |
     Kunde B |  2 |
     Kunde C |  3 |
    (3 Zeilen)
    
    test=*# select kunde, anzahl, array_to_string(array_agg(x.s),',') from (select kunde, anzahl, sum(anzahl) over (order by kunde) - anzahl +1 as von, sum(anzahl) over (order by kunde)  as bis from dropout) d left join lateral (select * from generate_series(d.von, d.bis)) x(s) on (true) group by kunde, anzahl order by kunde;
      kunde  | anzahl | array_to_string
    ---------+--------+-----------------
     Kunde A |  4 | 1,2,3,4
     Kunde B |  2 | 5,6
     Kunde C |  3 | 7,8,9
    (3 Zeilen)
    
    Das Update spare ich mir hier erst einmal der Einfachkeit halber.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    darf es noch mit führenden Nullen sein?

    Code:
    test=*# select kunde, anzahl, array_to_string(array_agg(to_char(x.s,'009')),',') from (select kunde, anzahl, sum(anzahl) over (order by kunde) - anzahl +1 as von, sum(anzahl) over (order by kunde)  as bis from dropout) d left join lateral (select * from generate_series(d.von, d.bis)) x(s) on (true) group by kunde, anzahl order by kunde;
      kunde  | anzahl |  array_to_string   
    ---------+--------+---------------------
     Kunde A |  4 |  001, 002, 003, 004
     Kunde B |  2 |  005, 006
     Kunde C |  3 |  007, 008, 009
    (3 Zeilen)
    
    test=*#
    
     
  4. Dropout

    Dropout Neuer Benutzer

    Hallo akretschmer,
    danke für deine Antwort. Aber PostgreSQL ist bei unserem 1und1 Paket leider nicht vorgesehen.
    Muss schon in mysql sein.

    Trotzdem danke...
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Tja. Dafür ist es halt billig, gell?
     
  6. Dropout

    Dropout Neuer Benutzer

    Nein aber älterer Tarif.
    Einen Wechsel muss ich erst mit unserem Vereinsvorstand besprechen.
     
  7. drdimitri

    drdimitri Datenbank-Guru

    Ist das alles in einer Tabelle gespeichert?
    Dann wäre es eine Überlegung wert das in zwei Tabellen aufzuteilen.

    Die Spalte Anzahl wäre dann überflüssig, da es sich aus der Anzahl Gutscheine die einem Kunden zugeordnet sind ergiebig.

    Problem erledigt, MySQL kann bleiben ;)
     
    Walter gefällt das.
  8. akretschmer

    akretschmer Datenbank-Guru

    Das klingt mach einem wirklich genialen Plan. Leider versteh ich ihn nur nicht.
     
  9. drdimitri

    drdimitri Datenbank-Guru

    Zwei Tabellen: Kunde und Gutschein verbunden per Fremdschlüssel.
    Bekommt ein Kunde Gutscheine werden diese in die Gutscheintabelle eingetragen.

    Möchte ich die Anzahl wissen, muss ich nur die Gutscheine die ein Kunde besitzt zählen.

    Das Eintragen der Gutscheine mit der gewünschten Anzahl übernimmt die Anwendung, das sollte überschaubarer Aufwand sein. Die Nummerierung kann per AutoInc Feld erfolgen. Wenn die Anzeige an der Oberfläche mit führenden Nullen erfolgen soll, wird dies in der Anzeige so formatiert.
     
  10. akretschmer

    akretschmer Datenbank-Guru

    wie ich schon sagte: genialer Plan ;-)
     
  11. drdimitri

    drdimitri Datenbank-Guru

    Es ist mein Job geniale Pläne zu machen :p
     
    akretschmer gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden