Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/01/2012, 19h01   #1
Membre régulier
 
Inscription : juillet 2005
Messages : 484
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 484
Points : 87
Points : 87
Par défaut Auto incrémentation spéciale

Bonjour,

J'ai un besoin mais je ne sais pas si la solution existe.

Voila, j'ai besoin d'avoir dans une table un numérotation qui correspond a des factures.

Voici le principe de numérotation.

facture N° 12 01 15 01

le 12 étant l'année
le 01 le mois
le 15 le jour
et enfin le 01 la premier facture de l'année.

comment puis-je faire pour mettre en place dans ma table une colonne qui répond a ce principe de fonctionnement et automatiquement ?
nebil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 22h07   #2
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
je l'aurai plutôt fait en php...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 07h10   #3
Membre régulier
 
Inscription : juillet 2005
Messages : 484
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 484
Points : 87
Points : 87
Je suis preneur
nebil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 08h32   #4
Membre expérimenté
 
Avatar de redoran
 
Homme
Developpeur- Amateur
Inscription : juin 2010
Messages : 981
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : Algérie

Informations professionnelles :
Activité : Developpeur- Amateur
Secteur : Santé

Informations forums :
Inscription : juin 2010
Messages : 981
Points : 572
Points : 572
Envoyer un message via Skype™ à redoran
Re ;
l
Citation:
e 12 étant l'année
le 01 le mois
le 15 le jour
c'est informations tu peut les extraires avec sql de la date de la facture ou avec du php et tu les met dans une variable ensuite tu fait une concaténation avec le numéro séquentiel de la facture
redoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 09h37   #5
Membre régulier
 
Inscription : juillet 2005
Messages : 484
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 484
Points : 87
Points : 87
oui mais je ne vois pas comment je vais insérer

la date faut-il une ligne timestamp dans la table si oui
quel format ?
nebil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 09h48   #6
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Un bigint suffit et pour intégrer le timestamp, on peut utiliser la fonction time()
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 09h53   #7
Membre régulier
 
Inscription : juillet 2005
Messages : 484
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 484
Points : 87
Points : 87
c'est bon ca roule.
Merci
nebil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 09h59   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
J'ose espérer quand même que tu n'utilises pas cette "auto-incrémentation spéciale" comme clé primaire de la table ?

Et je mettrais plutôt une colonne de type DATE pour la date de la facture ; on s'en fout un peu de savoir qu'elle a été enregistrée à 09:58:36 non ?

Si plusieurs personnes peuvent saisir des factures, attention au traitement en PHP qui peut donner deux fois le même numéro ! Il vaudrait mieux faire ça en SQL.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 10h25   #9
Membre régulier
 
Inscription : juillet 2005
Messages : 484
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 484
Points : 87
Points : 87
Non, je suis seul a saisir des factures donc pas de chance de double.
merci pour la remarque.
nebil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 15h35   #10
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
Citation:
Si plusieurs personnes peuvent saisir des factures, attention au traitement en PHP qui peut donner deux fois le même numéro ! Il vaudrait mieux faire ça en SQL.
non justement si il en fait une clé primaire ou un identifiant unique, il n' y a aucun risque de doublon, même si l'insertion ne se ferra pas...
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 15h52   #11
Membre régulier
 
Inscription : juillet 2005
Messages : 484
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 484
Points : 87
Points : 87
Je pense à un problème technique de mise en place.

pour insérer l'année le mois le jour

je vais utiliser "date" puis après je dois insérer le numéro de facture

par contre je souhaite faire que le numéro de facture reviennent a zéro en début d'année.

Ma dernière N° 35 du 29 décembre 2011 facture 2011 donne cela

11122935

et ma première facture de janvier 2012 celle du 25 janvier 2012

12012501

le problème est, comment faire pour que le compteur des factures retombe a

zero chaque année ?
nebil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 17h18   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Essaie cette requête, en l'adaptant à ton nom de table et ton nom de colonne, pour extraire le dernier numéro de facture de cette année.
Code :
1
2
3
SELECT COALESCE(MAX(CAST(RIGHT(fac_numero, LENGTH(fac_numero) - 6) AS UNSIGNED)), 0) AS num_derniere_facture
FROM facture
WHERE YEAR(STR_TO_DATE(LEFT(fac_numero, 6), '%y%m%d')) = YEAR(CURRENT_DATE)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 18h35   #13
Membre éclairé
 
Inscription : juin 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 337
Points : 393
Points : 393
tu peu aussi mettre ta colonne année un clé (unique ca c pas bon) index, pour faire une requête du genre

Code :
1
2
3
4
 
$query= "select count(*) from table_facture  WHERE  annee = '2012' ";
$result= mysql_query($query)or die("");
$total = mysql_num_rows($result);

ou

Code :
1
2
3
4
5
 
$query= "select MAX(numFacture)+1 as max from table_facture  WHERE  annee = '2012' ";
$result= mysql_query($query)or die("");
$row=mysql_fetch_row($result);
$numFact = $row[0]['max'];
__________________
Conception / Dev
ascito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 18h40   #14
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
Citation:
Envoyé par ascito Voir le message
tu peu aussi mettre ta colonne année un clé unique, pour faire une requête du genre

Code :
1
2
3
4
 
$query= "select count(*) from table_facture  WHERE  annee = '2012' ";
$result= mysql_query($query)or die("");
$total = mysql_num_rows($result);
ce qui implique une seule facture par année...
il y a aussi les users data type mais je trouve pas d'équivalent sur mysql.
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 18h48   #15
Membre éclairé
 
Inscription : juin 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 337
Points : 393
Points : 393
autant pour moi, index serait effectivement plus judicieux
__________________
Conception / Dev
ascito est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h45.


 
 
 
 
Partenaires

Hébergement Web