Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 17/03/2008, 14h06   #1
Invité régulier
 
Inscription : mai 2007
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 49
Points : 9
Points : 9
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 :
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 :
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à
gozu13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 14h15   #2
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 14h25   #3
Invité régulier
 
Inscription : mai 2007
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 49
Points : 9
Points : 9
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.
gozu13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 14h32   #4
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Pour calculer la moyenne il faut utiliser la fonction AVG
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 14h34   #5
Invité régulier
 
Inscription : mai 2007
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 49
Points : 9
Points : 9
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
gozu13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 14h43   #6
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 14h48   #7
Invité régulier
 
Inscription : mai 2007
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 49
Points : 9
Points : 9
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 )
gozu13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 14h54   #8
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 14h58   #9
Invité régulier
 
Inscription : mai 2007
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 49
Points : 9
Points : 9
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
gozu13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 15h03   #10
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
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..
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 15h09   #11
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
Essayes ça :
Code sql :
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 15h18   #12
Invité régulier
 
Inscription : mai 2007
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 49
Points : 9
Points : 9
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
gozu13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 15h23   #13
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
modifie aussi la structure de tes tables ça fera grimper ta note
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 15h25   #14
Invité régulier
 
Inscription : mai 2007
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 49
Points : 9
Points : 9
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.
gozu13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 15h40   #15
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h02.


 
 
 
 
Partenaires

Hébergement Web