Requete SQL

cecile -  
 cecile -
Bonjour,

Je souhaite réaliser une requete sql concernant le résultat d'un match entre 2 equipes. La table matchs a deux clées etrangères provenant d'une table equipe. Le problème est que à l'exécution, la requete ne sort aucun enregistrement, voici mon code que je teste d'abord sous phpmyadmin:

SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe where
matchs.id_tournoi=tournoi.id_tournoi
and matchs.equipe_dom=equipe.id_equipe
and matchs.equipe_ext=equipe.id_equipe

Je pense que le problème vient de deux clées etrangere dans la table matchs a qui référencent la clée primaire de la table equipe, car lorsque je supprime une condition par exemple, matchs.equipe_ext=equipe.id_equipe, la requete me renvoie des enregistrements.

Merci d'avance
Configuration: Windows Vista
Firefox 3.0.5

3 réponses

  1. PetiteTete Messages postés 44 Statut Membre
     
    est-que tu peux donner la structure de tes tables stp ? là tu a l'air de faire une requete activant trois tables.
    merci
    0
  2. CéKoiDonk..
     
    Bonsoir,

    SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe where
    matchs.id_tournoi=tournoi.id_tournoi
    and matchs.equipe_dom=equipe.id_equipe
    and matchs.equipe_ext=equipe.id_equipe

    --> D'après les champs que vous récupérez dans votre requête, il est inutile pour le moment de faire une jointure avec la table equipe :

    SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe where
    matchs.id_tournoi=tournoi.id_tournoi

    --> c'est amplement suffisant.

    Dans tous les cas, vous auriez du écrire votre requête ainsi si vous utilisez 2 fois la table equipe :

    SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe e1, equipe e2 where
    matchs.id_tournoi=tournoi.id_tournoi
    and matchs.equipe_dom= e1.id_equipe
    and matchs.equipe_ext= e2.id_equipe

    Faudrait même voir si vous utilisez des champs de la table tournoi.
    Dans le cas contraire --> la jointure avec tournoi est là aussi inutile.

    cdrlt.
    0
    1. KéKeCest !!..
       
      Re,

      petite erreur d'inattention :

      1ere requête corrigée (voir plus haut) :

      SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi where
      matchs.id_tournoi=tournoi.id_tournoi


      --> là ça sera mieux.

      cdrlt.
      0
  3. KéKeCest !!..
     
    Re,

    Pour pas vous embrouiller à savoir si oui ou non il faudrait vraiment faire toutes vos jointures etc ... :

    SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext
    FROM matchs, tournoi, equipe e1, equipe e2
    where
    matchs.id_tournoi=tournoi.id_tournoi
    and matchs.equipe_dom=e1.id_equipe
    and matchs.equipe_ext= e2.id_equipe

    --> Ça c'est correct comme requête et ça vous rendra vos enregistrements dans tous les cas.

    A+.
    0
    1. cecile
       
      Bonsoir,

      Je vous remercie beaucoup de m'avoir répondu.
      La structure de mes 3 tables (equipe, match, tournoi) est la suivante:
      - equipe(id_equioe, nom_equipe, type)
      -tournoi(id_tournoi, nom_tournoi)
      -matchs(id_match, resultat_match, date_match, lieu_match, #equipe_dom, #equipe_ext, #id_tournoi)

      Le but est de faire afficher un tableau de résultats en récupérant le nom des équipes extérieures et domiciles. Sur ce point, j'ai eu bcp de mal car les deux clés étrangères référencent la meme clé primaire id_equipe. Je pense qu'il faut faire donc une jointure avec la table equipe pour récupérer les noms des équipes.

      La requete que vous m'avez donnée marche, effectivement, je souhaite utiliser deux fois la meme table equipe:
      SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe e1, equipe e2 where
      matchs.id_tournoi=tournoi.id_tournoi
      and matchs.equipe_dom= e1.id_equipe
      and matchs.equipe_ext= e2.id_equipe

      Par contre, lorsque j'ajoute un champ nom_equipe de la table equipe pour avoir le nom des équipes extérieurs et domiciles, j'ai un message "#1052 - Champ: 'nom_equipe' dans field list est ambigu"


      Merci beaucoup
      0
    2. Dod_Is_Sunshine > cecile
       
      Bonjour,

      Utiliser 2 fois la même table équipe est strictement nécessaire dans votre cas pour récupérer vos billes et correspond en faite à une "auto-jointure" car 2 colonnes de la table match pointent vers une même clef primaire d'une table externe.

      > J'avais oublié d'indiquer les références des tables associées aux colonnes affichées et voici donc la correction :

      SELECT m.date_match, m.lieu_match, m.equipe_dom, m.resultat_match, m.equipe_ext
      FROM matchs m, tournoi t, equipe e1, equipe e2
      where
      m.id_tournoi = t.id_tournoi
      and m.equipe_dom= e1.id_equipe
      and m.equipe_ext= e2.id_equipe

      Remarque :

      Merci pour nous avoir donné la structure de vos tables mais comme vous pourrez le constater, les colonnes affichées ne dépendent que de la table match - les jointures ne sont donc pas 'strictement' nécessaires ici si votre référentiel est correctement construit (respect des contraintes de référence) et cette requête revient à celle ci (vous pouvez le tester et comparer) :

      SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext
      FROM matchs

      amicalement.
      0
    3. Dod_Is_Sunshine > cecile
       
      Re,

      (j'avais pas vu votre besoin sur nom_equipe) :

      SELECT m.date_match AS DATE_MATCH, m.lieu_match AS LIEU_MATCH, m.equipe_dom AS ID_EQUIPE_DOM, m.resultat_match AS RES_MATCH, m.equipe_ext AS ID_EQUIPE_EXT, e1.nom_equipe AS NOM_EQUIPE_DOM, e2.nom_equipe AS NOM_EQUIPE_EXT
      FROM matchs m, tournoi t, equipe e1, equipe e2
      where
      m.id_tournoi = t.id_tournoi
      and m.equipe_dom= e1.id_equipe
      and m.equipe_ext= e2.id_equipe

      Avec :

      e1.nom_equipe : c'est le nom de l'équipe à domicile
      e2.nom_equipe : c'est ici le nom de l'équipe extérieure.

      Voilà je pense.
      0
    4. cecile > Dod_Is_Sunshine
       
      Bonjour,

      Ca marche très bien, parfait, , je vous remercie infiniment. C'est très gentil de votre part de m'avoir consacré du temps.

      Bonne journée
      0
    5. Dod_Is_Sunshine > cecile
       
      Mici,

      l'important c'est que vous compreniez ici la nécessité de passer par une "auto-jointure".

      Crdlt.
      0