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

PHP & Base de données Discussion :

[SQL] Création d'un TOP 5


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Par défaut [SQL] Création d'un TOP 5
    Bonjour,

    Je suis étudiants en multimédia, et je dois réaliser un site internet de partage de photos en php/mysql pour un projet, nous travaillons en binome, et d'aprés la description du projet, notre site de base est terminé, mais on a la possibilité d'y rajouter des améliorations afin d'améliorer en retour notre note...

    Parmi toutes les améliorations j'ai choisit l'amélioration notation.

    Le principe:
    Créer un formulaire, ou tout membre ( excepté l'auteur de la photo ) peut voter.
    Afficher la note minimum , la note maximum et la moyenne de chaque photo en fonctions de l'identifiant de la photo.

    Jusque la j'ai réussi a tout faire.
    Le problème c'est qu'il faut aussi que je crée une page ou on peut voir les 5 photos qui ont la meilleur note. Niveau PHP je débute mais niveau MYSQL je m'y connais très peu et j'arrive pas du tout a selectionner ce que je veut pour afficher les 5 photos les mieux notés.


    Quelqu'un pourrait m'aider a faire ma requete car la je m'en sort pas.*

    Voici ma table notation:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `note` (
      `id_note` int(11) NOT NULL auto_increment,
      `id_photo` int(11) NOT NULL,
      `id_user` int(11) NOT NULL,
      `note_donne` varchar(5) NOT NULL,
      PRIMARY KEY  (`id_note`),
      KEY `id_photo` (`id_photo`,`id_user`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;

    Voici ma table photo :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE `photo` (
      `id_photo` int(11) NOT NULL auto_increment,
      `id_user` int(11) NOT NULL,
      `titre` varchar(30) NOT NULL,
      `description` varchar(250) default NULL,
      `categorie` varchar(30) default NULL,
      `date_depot` varchar(20) default NULL,
      `nom_fic` varchar(75) NOT NULL,
      PRIMARY KEY  (`id_photo`),
      KEY `id_user` (`id_user`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
    Merci beaucoup si quelqu'un passe par là

  2. #2
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    SELECT * FROM ma tables ORDER BY note DESC LIMIT 5.
    Goûte ça pour me dire c'est bon ou pas.
    Ceci aura pour effet de classer par note à la limite de 5 enregistrements.

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Par défaut
    Alors j'ai déja gouter quelque chose comme ca :

    SELECT * FROM note ORDER BY note_donne DESC LIMIT 5.

    Mais le problème c'est que ça va me mettre les 5 meilleurs notes et pas les 5 meilleurs moyennes. Imaginons 2 utilisateurs mette 10 a la même photo , dans mon TOP 5 j'aurais 2 fois la même photo. En faite le Order by est pas mal mais d'abord faudrait faire la moyenne des note_donne en fonction de l'id_photo.

  4. #4
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Pour calculer la moyenne il faut utiliser la fonction AVG

  5. #5
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Par défaut
    AVG() je connais , je l'ai déja utilisé dans mon site web.
    Mais la moi j'arrive pas a formuler la requete complete qui fait la moyenne des note en fonction de l'id_photo et apres qui utlise le ORDER BY.

    Faut faire 2 requetes ? car la je voit pas du tout

  6. #6
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Tu fais un SUM de toute les notes d'une image Je crois qu'il faut utiliser un group by sur le sum par image. Là tu peux utiliser le limit.

  7. #7
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Par défaut
    berceker united je conner pas SUM je suis en train de chercher dans la doc.
    Par contre tu as l'air de bien comprendremon problème tu pourrais pas m'écrire un peu la syntaxe de ma requete stp.

    Merci

    ( PS : je suis sur la doc la XD http://dev.mysql.com/doc/refman/5.0/...modifiers.html )

  8. #8
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    SUM() permet d'additionner une colonne. Celle qui à la plus grosse somme à forcément gagné.
    Là je peux pas tester car j'ai pas de serveur sous la mais. Je sais que le GROUP BY peut t'aider mais perso je l'utilise peut donc il faut que je teste

  9. #9
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Par défaut
    C'est chaud SQL je suis perdu la.

    SUM permet d'additionner une colonne mais faudraitr que j'additionne les notes et apres que je divise par le nombre de lignes pour pouvoir faire la moyenne. C'est de plus en plus compliquer ... je sent que je vais abandonner

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    tu as de grosse incoherence ds la structure de ta base un champ note est de type int les clé etrangéres ne sont pas bien établies..

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Essayes ça :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select avg(note_donne) as moyenne, id_photo
    from note
    group by id_photo
    order by moyenne desc
    limit 5
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Par défaut
    CELIRA I LOVE YOU !!!!!!!!!!!!

    Ca marche, c'est trop fort , je reprend gôut au PHP.
    Par contre j'ai encore quelque soucis toujours sur la BDD mais pour mon amélioration catégorie.

    http://www.developpez.net/forums/sho...74#post3054574

    Si Celira tu as le temps, n'ésite pas jeter un coup d'oeil

    ENCORE MERCI à tous ce qui m'ont aider a résoudre mon problème.
    Ils sont 3 je les cite : CELIRA , berceker united, boo64

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    modifie aussi la structure de tes tables ça fera grimper ta note

  14. #14
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Par défaut
    MDr je note b0064 mais c'est sur la machine de mon binôme qu'on a traité les clé étrangère la j'ai pas fait gaffe je vais rectifier ça.

  15. #15
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par gozu13 Voir le message
    CELIRA I LOVE YOU !!!!!!!!!!!!

    Ca marche, c'est trop fort , je reprend gôut au PHP.
    de rien (surtout que là, c'était plutôt un problème sql, mais bon )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SQL : Création d'un tableau croisé dynamique
    Par chaporon dans le forum SQL
    Réponses: 11
    Dernier message: 17/05/2017, 21h25
  2. [SQL] Création d'une nouvelle base
    Par balabonov dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 27/09/2006, 15h14
  3. [Requête SQL][ACCESS 2003] - Fonction TOP, DISTINCT
    Par guiguikawa dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 20/06/2006, 11h41
  4. [PL/SQL] Création fichiers txt chez l'utilisateur
    Par NPortmann dans le forum Oracle
    Réponses: 13
    Dernier message: 05/05/2006, 18h46

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