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 :

recupérer la plus grande valeur dans une bdd


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Consultant process engineer industrial
    Inscrit en
    Janvier 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant process engineer industrial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 148
    Points : 93
    Points
    93
    Par défaut recupérer la plus grande valeur dans une bdd
    Bonjour,
    Un petit souci dans mon php

    dans ma base de donnée j'enregistre tout les numéros de facture généré,
    afin de générer une nouvelle facture celui-ci va récupérer le dernier numéro de facture.
    voici comment ce présente met numéro de facture:
    Numéro de fature:
    2012-0001
    2012-0002
    2012-0003
    2012-0004
    2012-0005

    Je veux récupérer le dernier numéro de facture lui donnée une valeur +1 pour que ma nouvel facture soit en claire 2012-0006

    pour cela voici ce que je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $query = "select numfacture from facture order by numfacture DESC limit 1";
    	$result = mysql_query($query) or die ("Exécution de la requête impossible");
    	$maxnumfacture = mysql_result ($result,0)+1;
    avant j'utilisais un nombre entier aujourd'hui j'ai changer ma façon de générer met numéros de facture, le problème et présent depuis que j'ai ajouté un - dans mon numéro de facture .

    Cordialement

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select max(numfacture) as numMax from facture

  3. #3
    Membre régulier
    Homme Profil pro
    Consultant process engineer industrial
    Inscrit en
    Janvier 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant process engineer industrial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 148
    Points : 93
    Points
    93
    Par défaut
    ton code permet de récupérer le dernier enregistrement il me semble !? et agi simplement sur une valeur numérique entier, en occurrence la j'ai un tiret dans le numéro de ma facture..

  4. #4
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    Quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    list($pat1, $part2) = split('-', mysql_result ($result,0));
    $part2++;
    $maxnumfacture = $part1."-".$part2;

  5. #5
    Membre régulier
    Homme Profil pro
    Consultant process engineer industrial
    Inscrit en
    Janvier 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant process engineer industrial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 148
    Points : 93
    Points
    93
    Par défaut
    nsanabi

    ça résolue pas le problème ce que tu propose, le problème de base il est a la sélection dans la base de donnée... ça ne veux sélectionné le plus grand..

    merci tout de même de ton intervention.

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par djo007 Voir le message
    ton code permet de récupérer le dernier enregistrement il me semble
    Pas du tout, dans une base de données c'est une erreur que de parler de dernier enregistrement. A vrai dire la notion de premier, dernier ou milieu n'existe pas. Il n'y a pas de position à moins que tu n'utilises un champs spécifique porteur de cette information qui reste, somme toute, très très relative.

    Citation Envoyé par djo007 Voir le message
    et agi simplement sur une valeur numérique entier, en occurrence la j'ai un tiret dans le numéro de ma facture..
    Encore raté
    MAX() se contente des deux formats : numérique ou texte. Donc le code donné par Bovino répond parfaitement à ton problème. Essayes-le et tu verras. Regardes ici

  7. #7
    Membre régulier
    Homme Profil pro
    Consultant process engineer industrial
    Inscrit en
    Janvier 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant process engineer industrial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 148
    Points : 93
    Points
    93
    Par défaut
    salut rawsrc

    J'ai essayé ce que Bovino ma proposé, le problèmes c'est que ça affiche les 4 premier chiffre donc ça s'arrete au tiret et sa ajoute +1

    pourquoi récupère t-il seulement les 4 premiers chiffres...

    dans ma table j'ai bien met

    2012-0001
    2012-0002
    2012-0003
    2012-0004
    2012-0005

    donc du coup dans ma variable il enregistre que le 2012 et y ajoute +1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $query = "SELECT max(numfacture) AS numMax FROM facture";
    	$result = mysql_query($query) or die ("Exécution de la requête impossible");
    	$maxnumfacture = mysql_result ($result,0)+1;

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Euh, c'est tout à fait normal.
    Tu récupère un string avec le sql.
    '2012-0001' n'est pas un nombre valide, tu ne peux pas lui faire un +1.
    D'où le tronquage au premier caractère non numérique rencontré.
    Gardes le code de Bovino et essayes avec le code de nsanabi

  9. #9
    Membre régulier
    Homme Profil pro
    Consultant process engineer industrial
    Inscrit en
    Janvier 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant process engineer industrial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 148
    Points : 93
    Points
    93
    Par défaut
    bonne nouvelle ça avance..

    Premier problème si je n'ajoute +1 il m'affiche bien 2012-0001, 2012-0002 etc...

    a partir du moment ou je met +1 ça change en 2012-2, 2012-3 hors mois je veux garder met 4 chiffre...

    autre chose il va faire +1 jus-cas 2012-0010 après il additionne plus..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	$query = "SELECT max(numfacture) AS numMax FROM facture";
    	$result = mysql_query($query) or die ("Exécution de la requête impossible");
    	list($part1, $part2) = explode('-', mysql_result ($result,0));
    	$part2++;
    	$maxnumfacture = $part1."-".$part2;
    Ps: j'ai utilisé un explode car split deconne

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Et comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $a = '2012-0001';
    list($y, $n) = explode('-', $a);
    $next = $y.'-'.sprintf('%04d', ++$n);

  11. #11
    Membre régulier
    Homme Profil pro
    Consultant process engineer industrial
    Inscrit en
    Janvier 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant process engineer industrial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 148
    Points : 93
    Points
    93
    Par défaut
    Impec rawscr ça fonctionne et grand merci à tout les trois

    rawscr
    Je comprend bien ce que ça fais mais alors la pour moi c'est en partie du chinois ^^
    sprintf('%04d', ++$part2);

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Pour le chinois, voici quelques explications :
    sprintf() est une fonction de formatage des données très pratique : un peu de lecture ici.
    Ensuite l'utilisation de ++$part2 veut dire qu'il faut incrémenter la valeur de la variable $part2 avant de l'utiliser dans sprintf().
    Voici le code équivalent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $a = '2012-0001';
    list($y, $n) = explode('-', $a);
    $n = $n + 1;
    $next = $y.'-'.sprintf('%04d', $n);
    Et si on avait utilisé $n++, cela aurait donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $a = '2012-0001';
    list($y, $n) = explode('-', $a);
    $next = $y.'-'.sprintf('%04d', $n);
    $n = $n + 1;
    Voilà, voilà

  13. #13
    Membre régulier
    Homme Profil pro
    Consultant process engineer industrial
    Inscrit en
    Janvier 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant process engineer industrial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 148
    Points : 93
    Points
    93
    Par défaut
    d'accord super sympas pour l'explication.
    je connaissais pas Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [10g] Afficher la plus grande valeur dans une requête
    Par alexis trotta dans le forum SQL
    Réponses: 6
    Dernier message: 14/03/2014, 14h54
  2. Récupérer la 2ème plus grande valeur dans une variable
    Par lyonnaisdu26 dans le forum QlikView
    Réponses: 3
    Dernier message: 12/03/2012, 13h58
  3. cherche la plus grande valeur dans une matrice
    Par thtghgh dans le forum MATLAB
    Réponses: 9
    Dernier message: 28/12/2009, 19h35
  4. pb pour rentrer une valeur dans une bdd mysql
    Par gaetan.tranvouez dans le forum Requêtes
    Réponses: 25
    Dernier message: 02/06/2006, 21h29
  5. Probleme pour insérer une valeur dans une bdd
    Par gaetan.tranvouez dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 30/05/2006, 10h58

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