fonction max

Eléphant du PHP | 172 Messages

19 nov. 2005, 22:19

Bonsoir à tous,

j'ai un petit problème de compréhension de la fonction max, je récupère dans une table un champ de chaque ligne avec while, et je voudrais récupérer la valeur maximale de ce champ, j'ai essayé simplement comme ça :
$tt_jour = max($resultat['jour']);
Puis comme ça :
$nbr_match = $resultat['jour'];
$tt_jour = max($nbr_match);
Mais une erreur est indiquée :

Code : Tout sélectionner

Warning: Wrong parameter count for max() in d:\siteinternet_i\dossierhtml\stats.php on line 69
:?
Je ne comprends pas comment faire pour récupérer cette valeur maximum, qu'est-ce que je fais de travers ?

Merci.

Mammouth du PHP | 983 Messages

19 nov. 2005, 22:23

Il faut que tu le fasses dans ta requête SQL.
La fonction max() prend au moins 2 paramètres numériques, ou un tableau et retourne la plus grande valeur.

Elle compare des valeurs numériques seulement.

Eléphant du PHP | 172 Messages

19 nov. 2005, 22:54

Merci, j'avais déjà été voir sur php.net, mais je pensais qu'en la mettant dans une boucle cela aurait marché.

Je viens d'essayer en faisant comme tu dis, je n'ai plus de message d'erreur, mais je n'ai toujours pas la valeur maximale.
$tt_jour = mysql_query("SELECT max['jour']  FROM sedan_matchs WHERE lieu = 'dom'");
Qu'est ce qui ne va pas dans ma requête ?

Mammouth du PHP | 983 Messages

19 nov. 2005, 22:56

Tu as bien un champ dans ta table sedan_matchs qui s'appelle jour.

Si c'est le cas, la syntaxe est:
$tt_jour = mysql_query("SELECT max(jour)  FROM sedan_matchs WHERE lieu = 'dom'");

Eléphant du PHP | 172 Messages

19 nov. 2005, 23:07

J'avais oublié qu'il fallait mettre ça entre parenthèses :oops:

Ca fonctionne, mais cela ne m'affiche pas la valeur max, mais :

Resource id #4

Ce serait une erreur provenant de ma table ?

Mammouth du PHP | 768 Messages

19 nov. 2005, 23:19

Je ne comprends pas comment faire pour récupérer cette valeur maximum, qu'est-ce que je fais de travers ?
Tu parles de la fonction php ou de la fonction d'agrégation SQL ?
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Eléphant du PHP | 172 Messages

19 nov. 2005, 23:31

Comme je ne sais pas trop à quoi correspond une une agrégation SQL, je ne saurais te répondre, le résultat que je souhiates avoir, c'est d'avoir la valeur maximale dans la colonne d'une table.

Voilà.

Mammouth du PHP | 983 Messages

19 nov. 2005, 23:33

C'est normal. mysql_query retourne une ressource. Pour obtenir ta valeur, il faut faire pointer une varaible sur la ressource. Tu peux le faire avec mysql_fetch_array() ou mysql_fetch_row(). Je te laisse voir la doc pour regarder comment on les utilise.

Pour faciliter la récupération, je te conseille de mettre un alias sur le resultat de MAX():
$tt_jour = mysql_query("SELECT max(jour) as max FROM sedan_matchs WHERE lieu = 'dom'");
De plus, si tu n'as aucun valeur dans la colonne jour dans ta table, MAX() te retourera null.

Eléphant du PHP | 172 Messages

20 nov. 2005, 00:29

Merci :D

Je crois avoir compris, j'ai eu du mal car je ne comprenais pas pourquoi cela m'affichait "array", et surtout parce que je ne pensais pas qu'il fallait absolument une valeur, donc j'ai mis 0, et ça marche.
$max_spect = mysql_query("SELECT max(spect) FROM sedan_matchs");
$max_spect_dom = mysql_fetch_array($max_spect);

echo "Plus forte affluence : ".$max_spect_dom['0']."<br />";
Encore merci rami

:wink:

Mammouth du PHP | 19672 Messages

20 nov. 2005, 11:54

Petites explications: ce n'est pas forcément évident quand on débute, je vais donc éclairer davantage ce point. Si tu veux faire afficher une variable et que tu obtiens "Array", ça veut tout simplement dire que la variable est un ... array ce qui signifie tableau en anglais, tableau indexé ou associatif. Pour faire afficher les valeurs, tu peux donc les afficher de façon brute avec print_r() ou var_dump() ou alors tu veux une valeur en particulier auquel cas il faut préciser l'index correspondant à la valeur recherchés.

Pourquoi 0 dans ton cas ? Parce que mysql_fetch_array retourne un tableau indexé et associatif. Tu aurais pu utiliser le même index en appelant mysql_fetch_row(), mais par contre, tu aurais eu un petit problème avec mysql_fetch_assoc qui retourne un tableau associatif dont les index sont les noms des colonnes demandées dans la requête. Il aurait fallu mettre un alias sur le champ, par exemple:

Code : Tout sélectionner

SELECT max(spect) AS 'maximum' FROM sedan_matchs
ça t'aurait permis d'obtenir le même résultat avec $max_spect_dom['maximum']

Je vais quand même faire une suggestion plus simple. Ta requête ne retourne qu'une seule valeur. Donc au lieu d'un fetch, tu aurais pu faire ceci:
$max_spect = mysql_query("SELECT max(spect) FROM sedan_matchs");
$max_spect_dom = mysql_result($max_spect, 0);

echo "Plus forte affluence : ".$max_spect_dom."<br />";
Là, on va chercher via mysql_result le résultat indiqué en second paramètre: ici, 0 ce qui correspond à la première ligne, et ici c'est la seule. Mais c'est une valeur scalaire et non tabulaire, tu n'as donc plus besoin d'utiliser un index quelconque.

Est-ce que tu vois mieux le schéma global de tout ceci ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 172 Messages

20 nov. 2005, 16:54

Merci Cyrano de ton explication limpide, j'ai opté pour la méthode simplifié que tu m'as donné, cela m'évite d'avoir à stipulé ['0'] à chaque fois que j'utilise ma variable.

Il y a une chose que j'ai pas encore très bien comprise, c'est faire une requête avec un allias, je vois pas encore trop comment ça fonctionne, mais ça viendra sûrement avec le temps et le besoin de l'utiliser.

Merci
:P