Moyenne avec requête bdd


TrAsKiN
WRInaute discret
WRInaute discret
 
Messages: 136
Inscription: 17 Juil 2006

Moyenne avec requête bdd

Message le Lun Oct 02, 2006 0:45

Bonsoir à tous !

Voilà ! J'aimerais faire une moyenne de notes stockées dans une base de données. J'ai déjà fais ceci :

Code: Tout sélectionner
mysql_query( "SELECT COUNT(*)'$nb_note' FROM `avis` WHERE `ref_id`='$id'" );
$requete_note = mysql_query( "SELECT * FROM `avis` WHERE `ref_id`='$id'" );
while ( $note = mysql_fetch_array( $requete_note ) ) {
   $total = ( $total + $note["note"] );
}
if ( $nb_note == 0 ) {
   echo "<p>Pas de note</p>";
} else {
   $moyenne = ( $total / $nb_note );
   echo "<p>Note : ". $moyenne ."</p>";
}


Mais ça m'affiche toujours "Pas de note" ! J'ai essayé d'autre truc mais c'est pire :evil: !


sonikbuzz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 469
Inscription: 21 Fév 2005

Message le Lun Oct 02, 2006 0:56

C'est pas top top comme script ...
Y'a plusieurs trucs qui fonctionne pas et y'a moyen de faire plus simple.

Déja ta variable $nb_note n'est pas déclaré et n'est pas incrémentée
-> $nb_note++; dans ta boucle

edit...
[mode=je fais tout :wink: ]
SELECT AVG(note) FROM `avis` WHERE `ref_id`='$id' GROUP BY ref_id;

Ca devrait être ok ...
[/mode]
Dernière édition par sonikbuzz le Lun Oct 02, 2006 1:08, édité 1 fois.


TrAsKiN
WRInaute discret
WRInaute discret
 
Messages: 136
Inscription: 17 Juil 2006

Message le Lun Oct 02, 2006 1:06

sonikbuzz a écrit:C'est pas top top comme script ...
Y'a plusieurs trucs qui fonctionne pas et y'a moyen de faire plus simple.


Bah j'ai cherché pendant un moment sur le net mais j'ai rien trouvé qui me convienne... Si tu as ça en stock je veux bien !

J'ai ajouter $nb_note++; mais ça ne change pas grand chose !


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Lun Oct 02, 2006 1:07

j'ai rien compris

pourquoi la première requete ?

on ne formate pas de variables numeriques avec l'apostrophe dans une clause

si tu veux connaitre le nombre de éléments dans un champs et pour un id

ça se fait de plusieurs manières

avec un count ou avec un mysql_num_rows

rog


sonikbuzz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 469
Inscription: 21 Fév 2005

Message le Lun Oct 02, 2006 1:09

J'ai édité mon 1er post :wink:


TrAsKiN
WRInaute discret
WRInaute discret
 
Messages: 136
Inscription: 17 Juil 2006

Message le Lun Oct 02, 2006 1:11

rog a écrit:j'ai rien compris

pourquoi la première requete ?

on ne formate pas de variables numeriques avec l'apostrophe dans une clause

si tu veux connaitre le nombre de éléments dans un champs et pour un id

ça se fait de plusieurs manières

avec un count ou avec un mysql_num_rows

rog


J'ai essayé avec un COUNT mais ça n'a rien donné ! Le première requête, j'ai simplement oublier de la viré ! Par contre je n'ai jamais utilisé mysql_num_rows, je ne vois pas trop ce qu'elle retourne !


TrAsKiN
WRInaute discret
WRInaute discret
 
Messages: 136
Inscription: 17 Juil 2006

Message le Lun Oct 02, 2006 2:11

sonikbuzz a écrit:SELECT AVG(note) FROM `avis` WHERE `ref_id`='$id' GROUP BY ref_id


Soit je suis nul, soit y a d'autre truc qui bloque !

Voilà ce que j'ai fais avec :

Code: Tout sélectionner
$moyenne = mysql_query( "SELECT AVG(`note`) FROM `avis` WHERE `ref_id`='$ref_id' GROUP BY `ref_id`" );
if ( $moyenne == 0 ) {
   echo "<p>Pas de note</p>";
} else {
   echo "<p>Note : ". $moyenne ."</p>";
}


Ca affiche toujours : " Note : Resource id #(un chiffre) " !


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Lun Oct 02, 2006 2:46

lol

faudrait quand meme apprendre les bases

les fonctions du type mysql_query ne retournent pas de résultat

elles retournent un identifiant de ressource

il faut ensuite monter la ressource pour en extraire le résultat

il y a un tas de fonction pour ça, la plus simple est mysql_result

rog


TrAsKiN
WRInaute discret
WRInaute discret
 
Messages: 136
Inscription: 17 Juil 2006

Message le Lun Oct 02, 2006 3:19

Désoler... :oops: Ca fais trois que j'apprend le PHP en regardant d'autres scripts, j'ai quasiment pas utilisé mysql_result. Je l'avais carrément zappé !

Maitenant le problème c'est que une erreur :

Warning: Wrong parameter count for mysql_result()

Je ne vois pourquoi, dans phpMyAdmin la requete est bonne !


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Lun Oct 02, 2006 3:40

essaies ça

( "SELECT AVG(note) as result FROM avis WHERE ref_id = $ref_id GROUP BY ref_id

ça crée un champ virtuel pour le resultat (si la table en a deja un, faut changer de nom)

et si ça marche pas

postes ta ligne de code mysql_result

rog


TrAsKiN
WRInaute discret
WRInaute discret
 
Messages: 136
Inscription: 17 Juil 2006

Message le Lun Oct 02, 2006 4:03

J'ai toujours la même erreur qui me rapporte à cette ligne :

Code: Tout sélectionner
$moyenne = mysql_result( "SELECT AVG(`note`) AS resultat FROM `avis` WHERE `ref_id`='$id' GROUP BY `ref_id`" );


Je suis plus trop sûr de comment utiliser mysql_result !


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

Message le Lun Oct 02, 2006 4:06

mysql_result(identifiant,position)

=

mysql_result($moyenne,0)

premier élément du résultat de la ressource $moyenne

rog


TrAsKiN
WRInaute discret
WRInaute discret
 
Messages: 136
Inscription: 17 Juil 2006

Message le Lun Oct 02, 2006 4:29

Merci (encore une fois) rog ! Ca marche ! :D

J'ai fais ceci :

Code: Tout sélectionner
$moyenne = @mysql_result( mysql_query( "SELECT AVG(`note`) AS resultat FROM `avis` WHERE `ref_id`='$id' GROUP BY `ref_id`" ), 0 );


En plus, je dormirais moins con ce matin !

J'ai mis le @ pour qu'il ne m'envoie pas d'erreur si c'est vide !


sonikbuzz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 469
Inscription: 21 Fév 2005

Message le Lun Oct 02, 2006 9:32

C'est mieux de faire comme ca :
Code: Tout sélectionner
$query = "SELECT AVG(note)  FROM avis WHERE ref_id='$id' GROUP BY ref_id";
$result = mysql_query($query);
$record_array = mysql_fetch_array($result, MYSQL_NUM);
$moy = $record_array[0];


Pour des questions de perf mieux vaut récuperer les resultats dans des "integer array" en plus ca évite de faire des "AS" .


TrAsKiN
WRInaute discret
WRInaute discret
 
Messages: 136
Inscription: 17 Juil 2006

Message le Lun Oct 02, 2006 11:28

sonikbuzz a écrit:C'est mieux de faire comme ca :
Code: Tout sélectionner
$query = "SELECT AVG(note)  FROM avis WHERE ref_id='$id' GROUP BY ref_id";
$result = mysql_query($query);
$record_array = mysql_fetch_array($result, MYSQL_NUM);
$moy = $record_array[0];


Pour des questions de perf mieux vaut récuperer les resultats dans des "integer array" en plus ca évite de faire des "AS" .


Je vais faire des tests et je vois lequel me plait le plus !


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités