Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
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 23/06/2011, 16h21   #1
Invité de passage
 
Alex
Inscription : septembre 2003
Messages : 12
Détails du profil
Informations personnelles :
Nom : Alex
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : septembre 2003
Messages : 12
Points : 0
Points : 0
Par défaut Fonction imbriqué et classement

Bonjour, je fais face à un problème qui me met face à mon incompétence. J'ai beau lire des trucs, essayer de me creuser la tête, je n'arrive pas à résoudre mon soucis.

En fait j'ai 2 tables :
- 1 "Professionnels" avec des noms de sociétés, classement par ID
- 1 "votes" comprenant les votes / sociétés , on retrouve donc l'ID

Dans la table "votes" j'ai les champs id - ip - note - nom (correspond à ID de l'autre table)
Pour déterminer la note d'une société sur les fiches j'ai donc une fonction qui fait le calcul moyen pour un nom (ID) donné.

Ce que je voudrais c'est pouvoir sortir les 5 sociétés ayant les meilleurs votes !!

Mais avec cette histoire de calcul préalable , je m'en sors pas !!
rubenxela est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 16h27   #2
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
Bonjour,

Pourrais tu nous montrer ton calcul préalable ?
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 16h53   #3
Invité de passage
 
Alex
Inscription : septembre 2003
Messages : 12
Détails du profil
Informations personnelles :
Nom : Alex
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : septembre 2003
Messages : 12
Points : 0
Points : 0
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
$result = mysql_query("SELECT `note` FROM `votes` WHERE `nom` = '".$id."'");
		$num_rows = mysql_num_rows($result);
		$i=0;
		$star_value = 0;
		while($i<$num_rows)
		{
			$rating = mysql_result($result,$i);
			$star_value = $star_value + $rating;
			$i++;
		}
		if($star_value==0)
		{
			$avg_value = 0;
		}
		else
		{
			$avg_value = $star_value / $num_rows;
		}
rubenxela est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 17h31   #4
Membre confirmé
 
Homme antoine jouan
Étudiant
Inscription : janvier 2010
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme antoine jouan
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2010
Messages : 175
Points : 250
Points : 250
Bonjour

Code :
1
2
3
 
 
select AVG(note) moyen_note From votes INNER JOIN table_pro ON table_pro.id = votes.nom GROUP BY ASC moyen_note LIMIT 0, 5
Bon mon sql est très rouillé mais l'idée est la
voila
jouana est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 17h32   #5
Invité de passage
 
Homme Romain Monteil
Développeur Web
Inscription : juin 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Romain Monteil
Âge : 24
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : juin 2011
Messages : 2
Points : 2
Points : 2
Si j'ai bien compris ton message, tu voudrais une requête qui te retourne les 5 sociétés ayants les meilleurs votes ?

Dans ce cas, tu pourrais rajouter un champ "note" dans la table "Professionnels" qui correspond à la note moyenne de la société (ton $avg_value) que tu met à jour à chaque vote.

Aprés tu as juste à faire la requête suivante :

Code :
SELECT * FROM professionnels ORDER BY note DESC LIMIT 5;
ker0x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 17h48   #6
Invité de passage
 
Alex
Inscription : septembre 2003
Messages : 12
Détails du profil
Informations personnelles :
Nom : Alex
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : septembre 2003
Messages : 12
Points : 0
Points : 0
C'est ce que j'avais initialement envisagé, il va falloir que je le mette à l'oeuvre et que je me creuse la tête.
Merci pour votre aide, je vais tenter un peu tout ça .

Citation:
Envoyé par ker0x Voir le message
Si j'ai bien compris ton message, tu voudrais une requête qui te retourne les 5 sociétés ayants les meilleurs votes ?

Dans ce cas, tu pourrais rajouter un champ "note" dans la table "Professionnels" qui correspond à la note moyenne de la société (ton $avg_value) que tu met à jour à chaque vote.

Aprés tu as juste à faire la requête suivante :

SELECT * FROM professionnels ORDER BY note DESC LIMIT 5;
rubenxela est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 18h16   #7
Membre confirmé
 
Homme antoine jouan
Étudiant
Inscription : janvier 2010
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme antoine jouan
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2010
Messages : 175
Points : 250
Points : 250
Ma solution evite l'ajout de colonne dans la bdd et toute la partie code deja existante enfin aprés tu voix

Cordialement
jouana est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 18h37   #8
Invité de passage
 
Alex
Inscription : septembre 2003
Messages : 12
Détails du profil
Informations personnelles :
Nom : Alex
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : septembre 2003
Messages : 12
Points : 0
Points : 0
Citation:
Envoyé par jouana Voir le message
Ma solution evite l'ajout de colonne dans la bdd et toute la partie code deja existante enfin aprés tu voix

Cordialement
Je compte bien essayer ça en premier lieu.
rubenxela est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 19h01   #9
Invité de passage
 
Alex
Inscription : septembre 2003
Messages : 12
Détails du profil
Informations personnelles :
Nom : Alex
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : septembre 2003
Messages : 12
Points : 0
Points : 0
Citation:
Envoyé par jouana Voir le message
Ma solution evite l'ajout de colonne dans la bdd et toute la partie code deja existante enfin aprés tu voix
Je viens d'essayer mais ça ne fonctionne pas (j'ai rajouté AVG(note) AS etc .. mais pas mieux)
En fait je pense que ça ne convient pas tout à fait parce que SELECT AVG fait la moyenne de la colonne mais mon problème résulte dans le fait que dans la colonne "note" de la table, j'ai toutes les notes de chaque fiche. Il me faut donc faire la moyenne par fiche (correspondant à une ID) pour pouvoir sortir les 5 ID avec les meilleures notes. Après en définitive si je sortais ça recroiser avec la table "professionnels" ne me semble pas trop compliqué.

Peut être il faudrait que je fasse avec les Array, mais il va falloir que je me rencarde car j'ai jamais fait ça.
rubenxela est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 19h06   #10
Membre confirmé
 
Homme antoine jouan
Étudiant
Inscription : janvier 2010
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme antoine jouan
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2010
Messages : 175
Points : 250
Points : 250
o pire tu peux faire l avg par id ca reduit ton code quand même et aprés avec un systeme de table temporaire ou tu stock test resultat tu peux avoir les 5 meilleur par un limit avec group by
jouana est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h36.


 
 
 
 
Partenaires

Hébergement Web