MySql: auto-increment in Abhängigkeit von anderem Feld

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich habe aktuell folgendes Problem. In eine einfache Tabelle sollen Veranstaltungsteilnehmer eingetragen werden. Als ID wird ein auto-increment Feld verwendet. So weit so gut.

Wenn jetzt aber die Anmeldungen für die nächste Veranstaltung kommen, erhalten die natürlich weiterhin fortlaufende Nummern, so daß die in einer Übersichtsliste mit irgendwelchen Nummern gelistet werden, aber nicht mit ihrer "richtigen" Nummer, die der Nummer ihrer Anmeldung für das aktuelle Event entspricht. Die erste Anmeldung soll nun mal die Nummer 1 bekommen und nicht z.B. die 49.

Jetzt suche ich eine Möglichkeit, die laufende Teilnehmernummer über ein auto-increment Feld zu vergeben, das von einem anderen Feld, z.B. der Nummer oder dem Datum der Veranstaltung, abhängig ist. Das würde bedeuten, daß Zahlen mehrfach vorkommen können, in Verbindung mit dem anderen Feld aber immer eindeutig sind. Im Moment fällt mir dazu nur ein, ein normales Feld zu nutzen und über max() den bisher höchsten Wert auszulesen, zu erhöhen und nachträglich den neuen Wert in den aktuellen Datensatz einzufügen. Wäre zwar möglich, aber umständlich und nicht wirklich sicher.

Ich hoffe, ich konnte das einigermaßen verständlich machen und habt da einen Tip für mich.

LG, Sprint
 
Trenne die technische ID und das was du anzeigst. Also 2 Felder.
ID (AutoIncrement)
ANMELDE_NR (Nummer)

Du solltest niemals die technische ID für irgendwelche Schöndarstellungen missbrauchen.

Dann kannst die beim INSERT es etwa so lösen. Achtung, ist nur ein Gedanke, keine fertige Lösung
SQL:
INSERT INTO teilnehmer (
    anmelde_nr,
    event_id,
    user_name
)
VALUES(
    (
        SELECT  IFNULL(MAX(anmelde_nr), 0) + 1
        FROM    teilnehmer
        WHERE   event_id = 11
    ),
    11,
    'Hans Muster'
);
oder
SQL:
INSERT INTO teilnehmer (
    anmelde_nr,
    event_id,
    user_name
)
SELECT  
        IFNULL(MAX(anmelde_nr), 0) + 1  AS anmelde_nr,
        11 AS event_id,
        'Hans Muster' AS user_name
FROM    teilnehmer
WHERE   event_id = 11
 
@sheel: Mit sicher meinte ich die Möglichkeit, daß bei gleichzeitiger Anmeldung was durcheinander kommt. Hatte ich früher schon mal erlebt.

@Yaslaw: Das zweite Muster, muß ich gestehen, verstehe ich nicht, aber mit dem ersten kann ich wohl was anfangen. Vielen Dank für die schnelle Hilfe.
 
So, hab das jetzt mal ausprobiert. Die Lösung von Yaslaw habe ich leider doch nicht hinbekommen. Ich habe immer die Fehlermeldung bekommen, daß die Verwendung der Zieltabelle in dem Statement nicht erlaubt sei.

Hab es dann über Transactions gelöst. Die extra Abfrage nach der letzten max. Nummer läßt sich ja eh nicht vermeiden.
 
Zurück