IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Auto incrémentation spéciale


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    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 ?

  2. #2
    Membre émérite Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    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 : 573
    Par défaut
    je l'aurai plutôt fait en php...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    Par défaut
    Je suis preneur

  4. #4
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ;
    l
    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

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    Par défaut
    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 ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Un bigint suffit et pour intégrer le timestamp, on peut utiliser la fonction time()

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    Par défaut
    c'est bon ca roule.
    Merci

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 814
    Billets dans le blog
    14
    Par défaut
    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 Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    Par défaut
    Non, je suis seul a saisir des factures donc pas de chance de double.
    merci pour la remarque.

  10. #10
    Membre émérite Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    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 : 573
    Par défaut
    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...

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 487
    Par défaut
    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 ?

  12. #12
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 814
    Billets dans le blog
    14
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    tu peu aussi mettre ta colonne année un clé (unique ca c pas bon) index, pour faire une requête du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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'];

  14. #14
    Membre émérite Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    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 : 573
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  15. #15
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    autant pour moi, index serait effectivement plus judicieux

Discussions similaires

  1. Pb d'auto incrémentation sous interbase !!!
    Par le.clown dans le forum InterBase
    Réponses: 2
    Dernier message: 26/02/2004, 14h11
  2. prbl auto-incrémente
    Par cb dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/11/2003, 11h32
  3. Dernière clé auto incrémenté ?
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 15/11/2003, 10h41
  4. [CODE] auto incrémentation ?
    Par Roi dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 25/09/2003, 15h09
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo