Selectionner plus grand chiffre d'une boucle

Eléphanteau du PHP | 38 Messages

02 mars 2007, 14:53

Bonjour,

Je viens ici pour vous demandez un petit coup de main ou je bloque.

Je m'explique, je fait une boucle sur un
$recuperation = "SELECT id_vente FROM commerce_user WHERE id_objet='1'";
Je me retrouve donc avec plusieur resultat, id_vente etant un chiffre, et je souhaiterai pouvoir selectionner le plus grand chiffre d'entre eux.

Connaissez vous une fonction permettant de faire sa? ou une alternative ?

Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

02 mars 2007, 15:00

$recuperation = "SELECT MAX(id_vente) FROM commerce_user WHERE id_objet='1'"; 
Te renverra uniquement le maximum.
$recuperation = "SELECT id_vente FROM commerce_user WHERE id_objet='1'" ORDER BY id_vente ASC; 
Te renverra tout tes id_vente et le dernier sera le plus grand :)
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mars 2007, 15:00

Si tu n'as besoin que de la valeur max, tu peux utiliser directement dans ta requête SQL la fonction MAX() pour ne récupérer que celle-ci.

Code : Tout sélectionner

SELECT MAX(champ) FROM ...
Si tu as besoin des différentes données, il te suffit de déclarer une variable à l'exterieur de ta boucle et dans la boucle de l'écraser avec la nouvelle valeur que si celle-ci est supérieure :
$val = 0;
while (...) {
  ...
  if($id > $val)
    $val = $id;
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 38 Messages

02 mars 2007, 16:28

Merci pour vos réponses, mais impossible de bien l'utiliser,

Voila ce que j'ai essayé
$recuperation = mysql_query("SELECT MAX(id_vente) AS primax FROM commerce_user WHERE id_objet='1'");
$contenu = mysql_fetch_row($recuperation) or die (mysql_error() );		

echo''.$contenu['primax'].'';
Mais je ne parviens pas à recupérer la valeur max .

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

02 mars 2007, 17:10

Merci pour vos réponses, mais impossible de bien l'utiliser,

Voila ce que j'ai essayé
$recuperation = mysql_query("SELECT MAX(id_vente) AS primax FROM commerce_user WHERE id_objet='1'");
$contenu = mysql_fetch_row($recuperation) or die (mysql_error() );		

echo''.$contenu['primax'].'';
Mais je ne parviens pas à recupérer la valeur max .
Avec mysql_fetch_row(), c'est normal que tu ne retrouves rien vu que ça renvoie un tableau numérique.
Donc soit tu utilises mysql_fetch_array(), soit tu récupères la variable $contenu[0] :)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 38 Messages

02 mars 2007, 17:36

Merci j'ai trouver une facon qui semble fonctionner, j'ai essayer avec la tienne mais l'incrementation ne fonctionnait pas ( je me servait de id_vente pour un INSERT dans ma bdd mais celui ci d'augmenter pas )
$recuperation = mysql_query("SELECT MAX(id_vente)FROM commerce_user WHERE id_objet='1'");
$max= mysql_result($recuperation, 0);

Cette facon te semble t-elle bonne ?

Merci :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 mars 2007, 17:30

C'est une bonne façon :)

Juste une petite remarque toutefois sur les apostrophes, tu peux faire directement :
echo $contenu['primax'];
// au lieu de 
echo''.$contenu['primax'].'';
Ca n'apporte rien de plus d'ajouter une chaine vide au début et à la fin, et ca surcharge inutilement ton code ;)

Egalement dans ta requête, si le champ "id_objet" est de type numérique (int, float, ..) alors ne met pas d'apostrophes autour des valeurs que tu spécifies (elles sont a utiliser uniquement pour les chaines ou les dates) :
mysql_query("SELECT MAX(id_vente) FROM commerce_user WHERE id_objet=1 "); 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...