2010-09-08 17 views
1

Le client souhaite qu'un champ de la base de données MySQL comprenne un préfixe, l'année et un compteur qui se réinitialise chaque année. PREFIX 2010 0001 ... PREFIX 2010 0734, puis PREFIX 2011 0001. Y at-il des astuces mysql pour y arriver ou est-ce que je garde une trace du plus grand nombre utilisé pour chaque année. Toutes les pensées ont apprécié.Le client souhaite un champ tel que PREFIX20100001

Répondre

1

MySQL ne peut pas créer des champs complexes comme ça, mais vous pouvez create a view qui simuler, basé sur quelque chose comme:

SELECT CONCAT('PREFIX', YEAR(NOW()), MOD(id, 10000)), ... 

Tant que il n'y a pas plus de 10 000 d'entre eux en un an , il serait relativement sûr comme une clé primaire "publique". Et sur le plan positif, si le champ id est un auto_increment normal en arrière-plan, vous auriez une vraie clé primaire à partir de laquelle travailler.

+1

Comment la partie id est-elle réinitialisée à '0001' au début de la nouvelle année? –

+0

... aussi - qu'en est-il des zéros principaux pour la partie id? La première valeur produite par l'exemple de code serait 'PREFIX20101' je pense. –

+1

Assez vrai. Une magie basée sur REPEAT(), LENGTH() etc .. pourrait gérer le padding/formatage. La réinitialisation annuelle serait plus difficile. Peut-être une variable côté serveur avec un événement annuel déclencheur de mise à jour avec un décalage/modulo approprié ... Il aurait besoin d'expérimentation, mais les bases de cette réponse sont probablement la meilleure solution. –