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 :

increment un nouveau number chaque année


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2016
    Messages : 45
    Par défaut increment un nouveau number chaque année
    Bonjour

    J'insère dans une table des numéros incrémentés 20221 (les 4 premiers chiffres sont l'année en cours), 20222, 20223 etc .. mais j'aimerais que le numéro commence à 1 (ex : 20231, 20241, 20251) à chaque passage de la nouvelle année.
    Pour incrémenter, je fais un select max mais la nouvelle doit commencer à 1 avec l'année devant (ex :20231).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $year = date ("Y");
    
    $sqlselectmax = "SELECT max(number) FROM matable limit 1;";
    
    $query = mysql_query($sqlselectmax) or die('Erreur SQL !'.$sqlselectmax.'<br>'.mysql_error());
     
    $IDNUM=@mysql_fetch_array($query);
    $IDNUMINCREMENT = $IDNUM[0];
    $IDNUMINCREMENT++;
    $IDNUMINCREMENT;
    // recupere le chiffre après l'année pour l'incrémenter. ex : 20221
    $str1_IDNUMINCREMENT = substr($IDNUMINCREMENT, 4);
    
       
    $sql = "INSERT INTO mytablel(id, number)
     VALUES('', '$year$str1_IDNUMCLICHEINCREMENT')";
    
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    Merci pour vos lumières.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Il faut comparer les 4 premiers chiffres du numéro max que te renvois ta BDD avec l'année en cours.
    Si l'année est inférieur alors tu recommence à 1 avec l'année en cours.

    Quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $maxYear = intval(substr($maxValueFromBDD, 0, 4));
    $currentYear = date('Y');
     
    if($maxYear < $currentYear) {
        $increment = $currentYear.'1';
    } else {
        // incrément habituel
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2016
    Messages : 45
    Par défaut
    Merci beaucoup pour la réponse. Je vais essayer.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 548
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Attention, en environnement multi-utilisateurs, selon le mode de gestion du verrouillage, il n'y a aucune garantie qu'entre le SELECT et l'INSERT, la valeur du chrono n'ait pas changé !

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2016
    Messages : 45
    Par défaut
    Bonjour

    Oui en effet. Il faudrait faire un lock sur la table avec des rollbacks mais c'est plus complexe.
    Il y a effectivement plusieurs utilisateurs.

Discussions similaires

  1. Incrementer un type à chaque nouvelle saisie
    Par SOPSOU dans le forum Langage
    Réponses: 3
    Dernier message: 23/08/2007, 14h33
  2. [SQL] Sélectionner un mois pour chaque année
    Par kreatik dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/06/2007, 14h35
  3. Réponses: 1
    Dernier message: 02/08/2006, 17h57
  4. Moyenne 5 dernières année pour chaque année?
    Par kissmytoe dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/02/2006, 19h28
  5. [ORACLE 9i] Avoir 12 lignes pour 12 mois de chaque années
    Par Worldofdada dans le forum Oracle
    Réponses: 4
    Dernier message: 17/11/2005, 11h57

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