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 :

Plus de champs dans la requête


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 77
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    tu ajoutes bien une virgule entre num_participant et nom ?
    Quel est ton message d'erreur ?

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 : 16 816
    Billets dans le blog
    14
    Par défaut
    1) Faute dans le GROUP BY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

Discussions similaires

  1. Tester l'existence d'un champ dans une requête
    Par Reidid dans le forum Access
    Réponses: 3
    Dernier message: 23/01/2006, 22h02
  2. Réponses: 9
    Dernier message: 17/10/2005, 17h13
  3. Pb de type de champs dans une requête
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/05/2005, 15h19
  4. Changement valeur d'un champ dans une requête
    Par Mimile28 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/04/2005, 14h28
  5. [SQL] Renommer un champ dans une requête
    Par martonpylon12 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/11/2003, 01h59

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