Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 30/01/2012, 14h16   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 52
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 52
Points : 11
Points : 11
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 :
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
djo007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 14h26   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 808
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 808
Points : 35 786
Points : 35 786
Code sql :
SELECT max(numfacture) AS numMax FROM facture
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/01/2012, 14h36   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 52
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 52
Points : 11
Points : 11
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..
djo007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 14h47   #4
Membre expérimenté
 
Avatar de nsanabi
 
Homme nabil nayd
Inscription : septembre 2003
Messages : 566
Détails du profil
Informations personnelles :
Nom : Homme nabil nayd

Informations forums :
Inscription : septembre 2003
Messages : 566
Points : 596
Points : 596
Envoyer un message via MSN à nsanabi
Quelque chose de ce genre :
Code :
1
2
3
4
 
list($pat1, $part2) = split('-', mysql_result ($result,0));
$part2++;
$maxnumfacture = $part1."-".$part2;
nsanabi est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/01/2012, 15h36   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 52
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 52
Points : 11
Points : 11
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.
djo007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 18h30   #6
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
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
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/01/2012, 19h28   #7
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 52
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 52
Points : 11
Points : 11
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 :
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;
djo007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 19h40   #8
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
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
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/01/2012, 20h18   #9
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 52
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 52
Points : 11
Points : 11
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 :
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
djo007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 20h25   #10
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Et comme ça :
Code :
1
2
3
$a = '2012-0001';
list($y, $n) = explode('-', $a);
$next = $y.'-'.sprintf('%04d', ++$n);
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/01/2012, 20h45   #11
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 52
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 52
Points : 11
Points : 11
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 ^^
Citation:
sprintf('%04d', ++$part2);
djo007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 21h04   #12
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
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 :
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 :
1
2
3
4
$a = '2012-0001';
list($y, $n) = explode('-', $a);
$next = $y.'-'.sprintf('%04d', $n);
$n = $n + 1;
Voilà, voilà
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/01/2012, 21h15   #13
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 52
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 52
Points : 11
Points : 11
d'accord super sympas pour l'explication.
je connaissais pas Merci beaucoup
djo007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h11.


 
 
 
 
Partenaires

Hébergement Web