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 SQL Discussion :

Besoin d'aide sur une requête SQL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut Besoin d'aide sur une requête SQL
    Bonjour

    Je développe un petit site web pour une association sportive. Ca se passe bien sauf que j'ai un problème (évidemment sinon je n'écrirai pas ce message ).

    Je souhaite sélectionner certaines informations provenant de différentes tables mais je n'arrive pas à écrire la requête SQL correspondante (j'ai jamais été très doué avec les jointures et ce genre de joyeusetés).

    Je fais donc appel à vous pour m'aider

    Voici le détail (en gros), des tables dont il est question :

    Table Joueurs (id_joueur, nom, prenom, licence, categorie, points)
    Table Tournois (id_tournoi, nom_tournoi)
    Table Participation (id_participation, id_tournoi, licence, categorie, participation)

    Le champs participation de la table Participation est un chiffre (0, 1 ou 2) déterminant si le joueur n'a pas choisi de participer au tournoi, s'il a accepté ou s'il a refusé.

    Le fonctionnement est le suivant :

    Le joueur arrive sur une page ou il est invité à choisir un tournoi et une catégorie.

    Le but, une fois ce choix effectué, est d'afficher une table contenant la licence, le nom de tous les joueurs participant à ce tournoi et étant de cette catégorie, ainsi que la valeur correspondant à leur participation à ce tournoi.
    Cette table aurait pour titre le nom du tournoi.

    Il est possible de le faire en plusieurs requêtes mais avec plein de joueurs, imaginez la lourdeur ... Je pense qu'il serait possible de le faire en une seule requête.

    Afin de vous aider à mieux cerner, je mets la façon barbare et totalement non optimisée d'obtenir ce résultat :

    Le nom du tournoi serait récupéré lors de la sélection de celui-ci par le joueur, on ne s'embête donc pas avec la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT licence, participation
      FROM Participation
     WHERE id_tournoi = 'id_du_tournoi'
        AND categorie = 'id_de_la_categorie';
    Ensuite, on ferait une boucle qui pour chaque résultat récupèrerait les données de la table Joueurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
      FROM Joueurs
     WHERE licence = '" . $row[0] . "';
    Évidemment, comme cela, c'est tout crade et très très lourd.

    Voilà, merci d'avance à celui qui me donnera la solution

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Quelle est la question en fait ?

    Donnez le résultat que vous souhaiteriez, avec un poil de donnée.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    J'ai mis en gras ce que je veux.

    Niveau donnée, ça donnerait par exemple si le joueur sélectionne le tournoi "Critérium" et la catégorie "Moins de 16 ans Homme" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Tournoi : Critérium Catégorie : Moins de 16 ans Homme
     
    Licence | Nom Prénom | Participation
    123456789 | Doe John | 1
    987654321 | Doe Simon | 2
    147258369 | Marley Bob | 0
    Voilà, en vous remerciant et en espérant que cela soit plus clair.

  4. #4
    Membre actif
    Homme Profil pro
    Analyst
    Inscrit en
    Juillet 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyst
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 150
    Points : 217
    Points
    217
    Par défaut
    Bonsoir,
    Je pense que tu as omis "id_joueur" dans la table participation.
    Je pense que tu as (aurais du avoir):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PK Joueurs : id_joueur
    PK Tournois : id_tournoi
    PK Participation: id_participation
       FK id_tournoi
       FK id_joueur
       UNQ (id_tournoi, id_joueur)
    Et Licence et categorie de Participation, ne doivent pas être présent (2eme forme normale)


    Du fait que tu alimentes la tables participations pour chacun des joueurs, il te suffit de faire des jointures simples (pas de left outer):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select p.licence, p.participation,j.*, t.*
    FROM Participation p
    inner join Joueur j on j.id_joueur=p.id_joueur
    inner join tournoi t on t.id_tournoi=p.id_tournoi
    WHERE p.id_tournoi = 'id_du_tournoi'
    AND p.categorie = 'id_de_la_categorie'
    Si tu n'as pas le choix que de passer par l'existant (Le problème, c'est quand tu reviendras dessus pour faire une modification):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select p.licence, p.participation,j.*, t.*
    FROM Participation p
    inner join Joueur j on j.licence=p.licence and j.categorie =p.categorie 
    inner join tournoi t on t.id_tournoi=p.id_tournoi
    WHERE p.id_tournoi = 'id_du_tournoi'
    AND p.categorie = 'id_de_la_categorie'
    (Pour la jointure entre p et J, cela peut etre réduit si l'un des 2 -la licence- est un UNIQUE)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    Merci pour ton aide

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

Discussions similaires

  1. Besoin d'aide sur une requête SQL
    Par omran.info dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2012, 10h28
  2. [SQL] Besoin d'aide sur une requête
    Par moonboot dans le forum Oracle
    Réponses: 1
    Dernier message: 01/08/2006, 15h56
  3. [SQL] Besoin d'aide sur une requête
    Par Angath dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/01/2006, 16h26
  4. Réponses: 1
    Dernier message: 03/08/2005, 11h41

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