[RESOLU] Créer une référence unique avec RAZ le 1er du mois

Eléphanteau du PHP | 12 Messages

21 nov. 2015, 16:06

Bonjour à tous,

Pour un projet, j'aurai besoin de créer une référence unique pour chaque pièce avec le format suivant : YYMM000

YY : les deux derniers chiffres de l'année en cours
MM : les deux chiffres du mois en cours
000 : Incrémentation automatique avec remise à zéro tous les 1er du mois

Sauriez vous comment je pourrais procéder pour effectuer ça ?

Concernant le mois et l'année, ça j'y arrive sans soucis.
Mon plus gros soucis est sur les 3 derniers chiffres qui doivent s'incrémenter automatiquement mais se remettre à zéro le 1er du mois et pour la première pièce enregistrée seulement (je peux par exemple enregistrer 5 pièces le 1er du mois de novembre 2015 et du coup mes références iront de 1511001 à 1511005)

Merci de votre aide ;)


EDIT : J'oubliais, j'avais pensé à une succession de if{} pour vérifier la date actuelle, la dernière référence, etc... mais je trouve ça un peu lourd comme traitement alors que je suis persuadé qu'il y'a plus simple, c'est juste que je n'ai pas encore trouvé comment simplifier...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 nov. 2015, 16:27

Bonjour,
Où sont stockées tes références ?
Si c'est dans une table SQL, il te suffit normalement à chaque insertion de faire une requête comme celle ci qui va te chercher la dernière référence du mois en cours :
SELECT * FROM table WHERE ref LIKE concat(DATE_FORMAT(NOW(),'%y%m'),"%") ORDER BY ref DESC LIMIT 1;
2 possibilités:
- soit cette requête ne te renvoie aucune ligne et alors tu peux initialiser à 001
- soit cette requête te renvoie une valeur et donc il faut que tu incrémente cette valeur de 1 pour ta nouvelle insertion
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 12 Messages

21 nov. 2015, 16:39

Oups, j'ai oublié de préciser !

En effet, les références sont dans une base SQL.

Si je comprend bien ta requête :
Tu récupères la dernière référence qui contient 'y' du jour actuel suivi de 'm' du jour actuel et suivi de caractères ? Je ne connaissais pas "concat()" ni NOW()

Du coup, une fois que j'ai cette info je n'ai plus qu'à créer mes deux if{} suivant le résultat de la requête en fait.

Petite question annexe, pour incrémenter de 1, je peux tout simplement lui mettre une fonction du genre :

Code : Tout sélectionner

$derniere_ref = $pdo->query($query_derniere_ref); $nouvelle_ref = $derniere_ref + 1;

Eléphanteau du PHP | 12 Messages

21 nov. 2015, 16:52

C'est résolu, je te remercie @rthur pour ton coup de pouce ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 nov. 2015, 17:26

:-)
Quand tout le reste a échoué, lisez le mode d'emploi...