IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fonction imbriqué et classement


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 12
    Points : 5
    Points
    5
    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 !!

  2. #2
    Membre averti Avatar de Nheo_
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 323
    Points : 416
    Points
    416
    Par défaut
    Bonjour,

    Pourrais tu nous montrer ton calcul préalable ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    		}

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Vienne (Limousin)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM professionnels ORDER BY note DESC LIMIT 5;

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    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;

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Ma solution evite l'ajout de colonne dans la bdd et toute la partie code deja existante enfin aprés tu voix

    Cordialement

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    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.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    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.

  10. #10
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    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

Discussions similaires

  1. [DOM] Fonctions "imbriquées" et valeur de retour
    Par hush dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/04/2007, 16h16
  2. Récupérer une fonction imbriquée
    Par Mikiman dans le forum Langage
    Réponses: 6
    Dernier message: 14/08/2006, 15h37
  3. Comportement fonctions imbriquées avec appel à Xmlhttprequest
    Par eirmag dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/05/2006, 16h10
  4. Fonctions imbriquées
    Par programaniac dans le forum Langage
    Réponses: 1
    Dernier message: 19/11/2005, 19h49
  5. Fonctions imbriquées - références
    Par Yux dans le forum Langage
    Réponses: 12
    Dernier message: 04/10/2005, 11h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo