Moyenne avec requête bdd

WRInaute discret
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:
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: !
 
WRInaute occasionnel
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]
 
WRInaute discret
sonikbuzz a dit:
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 !
 
WRInaute passionné
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
 
WRInaute discret
rog a dit:
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 !
 
WRInaute discret
sonikbuzz a dit:
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:
$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) " !
 
WRInaute passionné
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
 
WRInaute discret
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 !
 
WRInaute passionné
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
 
WRInaute discret
J'ai toujours la même erreur qui me rapporte à cette ligne :

Code:
$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 !
 
WRInaute passionné
mysql_result(identifiant,position)

=

mysql_result($moyenne,0)

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

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

J'ai fais ceci :

Code:
$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 !
 
WRInaute occasionnel
C'est mieux de faire comme ca :
Code:
$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" .
 
WRInaute discret
sonikbuzz a dit:
C'est mieux de faire comme ca :
Code:
$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 !
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut