Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 21/10/2011, 11h36   #1
Invité de passage
 
Inscription : septembre 2006
Messages : 13
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 13
Points : 2
Points : 2
Par défaut Plus de champs dans la requête

Bonjour,

Je dois réaliser un hit parade des 10 meilleurs participants présents à nos activités.

Voici mes tables :
participants(num_participant,nom,prenom,adresse,cp,ville,mail,...)
inscriptions(num_inscription,num_participant,num_activite,presence,...)
activites(num_activite,type,intitule,date,...)

Grâce à votre aide, j'ai pu réaliser cette requête :
Code :
1
2
3
4
5
6
7
8
9
10
 
SELECT nom, prenom,COUNT(*) AS total
FROM participants
INNER JOIN inscriptions ON inscriptions.num_participant = participants.num_participant
INNER JOIN activites ON activites.num_activite = inscriptions.num_activite
WHERE Date BETWEEN '$date_1' AND '$date_2'
AND inscriptions.presence='Oui'
GROUP BY participants.nom
ORDER BY total DESC
LIMIT 0 , 10
Cette requete affiche le nom et le prénom. Je dois aussi avoir le num_participant. Si je rajoute num_participant dans le SELECT de ma requete, j'ai un message d'erreur !

Comment modifier cette requête pour avoir plus d'info sur le participant ?

Je vous remercie +++

Nicolas
nicodespiennes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 13h17   #2
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
tu ajoutes bien une virgule entre num_participant et nom ?
Quel est ton message d'erreur ?
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 13h31   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
1) Faute dans le GROUP BY
Citation:
Code :
1
2
3
SELECT nom, prenom,COUNT(*) AS total
-- ...
GROUP BY participants.nom
Si tu as plusieurs participants avec le même nom mais des prénoms différents, il n'est pas sûr que le bon prénom soit associé au bon nom. Il faut toujours mettre dans le GROUP BY toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction d'agrégation.

2) À quoi sert la jointure avec la table "activités" puisqu'il n'y a pas de sélection ni de restriction sur cette table ?

3) Date est un mot réservé du langage SQL, tu ne devrais pas avoir de colonne portant ce nom.

4) Avec des alias, tu évites la confusion entre d'éventuelles colonnes portant le même nom dans différentes tables et tu facilite la relecture de la requête.

5) L'indentatiion facilite aussi la lecture de la requête.

Code :
1
2
3
4
5
6
7
8
9
SELECT p.num_participant, p.nom, p.prenom, 
  COUNT(*) AS total
FROM participants p
INNER JOIN inscriptions i ON i.num_participant = p.num_participant
WHERE i.`Date` BETWEEN '$date_1' AND '$date_2'
  AND i.presence = 'Oui'
GROUP BY p.num_participant, p.om, p.prenom
ORDER BY COUNT(*) DESC
LIMIT 0 , 10
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil 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 07h35.


 
 
 
 
Partenaires

Hébergement Web