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 :

Problème de relation entre deux tables + autre chose


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Problème de relation entre deux tables + autre chose
    Bonsoir à tous.

    Voilà alors j'ai un petit problème (un gros même)...

    Je fait un site actuellement pour un tournois "Counter Strike" dont voici l'adresse : http://manson.perso.free.fr/High-pcw/tournois.html

    Comme vous pouvez vous en doutez j'ai une table "team" qui comprend les teams, leurs pays (donc drapeau), les joueurs, et s'ils ont un server Counter Strike ou non.

    Celui qui m'as demandé ce site veut absolument choisir qui jouera contre qui.

    Voici les tables qui posent problème:
    - Table "team". Champs : "id, id_tournois, pays, team, joueur1, joueur2, joueur3, joueur4, joueur5, server"
    - Table "adversaires". Champs : "id, id_tournois, team1, team2"

    La table Team sert à afficher le tableau de la liste des teams, et la table adversaires sert à afficher la premiere colonne de l'abre (où il y as le nom des teams des 1/8 de final).

    Pour qu'il puisse choisir les adversaires qu'il veut, j'ai crée une liste déroulante qui affiche le nom des 16 teams préalablement choisies, avec une boucle while (selectionner de la table "team").

    Mon problème numéro 1 : est que je voudrai pouvoir éffacer de cette boucle les teams qui font partit de la table "aversaires" après envois, en clair celles qui restent à trouver un adversaire.

    Mon problème numéro 2: est que je ne sais absolument pas du tout comment afficher toutes ces teams après dans l'arbre, je pense personnellement que mes champs de ma table "adversaires" ne le permettent pas.

    Voilà j'espère avoir été clair et compréhensible, je remercie d'avance ceux qui auront le courage de me répondre et m'excuse pour la longueur de ce post.

    Goth_sensei.

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Tu désires ne pas prendre les teams pour lesquelles il reste à trouver un adversaire (#1) ou bien l'inverse, à savoir ne pas prendre les teams qui ont déjà un adversaire (#2) ?

    Cas #1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT t.id, t.team
    FROM team AS t, adversaires AS a
    WHERE t.id != a.team1
       AND t.id != a.team2
    ORDER BY t.team;
    Cas #2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT t.id, t.team
    FROM team AS t, adversaires AS a
    WHERE t.id = a.team1
       OR t.id = a.team2
    ORDER BY t.team;

    Second problème : Je pense que ton modèle relationnel n'est en effet pas très pratique (ou bien tu l'as incomplètement donné). S'il n'est valable que pour les 1/8° de finale, ça devrait suffire. Cela dit, je vois mal comment tu peux te limiter aux 1/8° de finale, dans la mesure où les 1/4 de finale viendront assurément ensuite. Bref, à mon avis il manque ce numéro, ce niveau quelque part.
    Donc, en partant du principe que tes tables ne concernent que les 1/8° de finale, je te propose ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t1.id, t1.team,
           t2.id, t2.team
    FROM team AS t1, team AS t2
    INNER JOIN adversaires AS a
       ON t1.id = a.team1
          AND t2.id = a.team2
    ORDER BY t1.team, t2.team;
    Ou (je ne suis pas spécialiste SQL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT t1.id, t1.team,
           t2.id, t2.team
    FROM adversaires AS a
    INNER JOIN team AS t1
       ON t1.id = a.team1
    INNER JOIN team AS t2
       ON t2.id = a.team2
    ORDER BY t1.team, t2.team;

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut merci bien
    Je te remercie pour cette réponse très complète et structuré (tu es le seul à m'avoir répondu parmis 3 forums et 5 amis webmaster...).

    Pour ce qui est des cas 1 et 2, j'avous vouloir faire les deux à la fois donc tu met très pratique.

    Pour ce qui est de mon modèle relationnel, oui c'est le complet donc oui c'est pas évident.

    Enfin pour si cela vas servir que pour les 1/8ème de final je répond oui vu que la suite sera gèrer par des nouvelles tables ("score 1/8", "score 1/4" ect..).

    En tout cas merci je vais essayer de voir avec ce que tu m'as donné même si je n'en comprend pas toute la signification.

    Goth_sensei.

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ne me remercie pas avant d'avoir vu que ça fonctionne (ce qui n'est pas certain du tout). Je ne doute pas qu'une bonne âme passera par ici et me corrigera.
    Concernant ta duplication de tables, j'espère que tu es conscient que ce n'est pas la meilleure solution qu'il soit possible d'adopter ? En informatique, dès lors que l'on duplique de l'information (à part un identifiant), il y a un problème.


    PS : Pense à regarder tes messages privés.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    J'avous ne pas savoir que c'est une mauvaise chose... Vu le nombre d'informations à caser dans ma BDD, je me suis dit qu'il fallais séparer en plusieurs tables (au total 7 ou 8)...

    Petite explication au Goth_sensei ? :p

    Ensuite pour ce qui est de ton code, effectivement cela ne marche pas mais je vois la méthode pour "combiner" les deux tables, à partir de là je vais essayer de me débrouiller (malgré ca si quelqu'un veut me donner ce qu'il faut ca m'irait très bien également).

    Merci quand même.

    Goth_sensei.

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Je pense que le simple fait d'ajouter un champ `niveau` contenant l'étape des finales et d'ajouter ce champ à la clef primaire devrait suffire à t'épargner la duplication de tables.

    Pour mieux voir, peux-être trouveras-tu de meilleures informations du côté de la FAQ modélisation.
    Concernant le SQL, je te recommande la FAQ SQL :
    http://sql.developpez.com/

    N'hésite pas à poster à nouveau si tu bloques sur un détail.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Pour informations kirkis j'ai trouver mon bonheur dans la requête sql suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mysql_query("SELECT team.team FROM team
    LEFT JOIN adversaires as adv1 on adv1.team1=team.team
    LEFT JOIN adversaires as adv2 on adv2.team2=team.team
    WHERE isnull(adv1.id) AND isnull(adv2.id)");
    Voilà en tout cas merci pour ton aide.

    Goth_sensei.

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Cool.

    Pense au bouton Résolu en bas de la page

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

Discussions similaires

  1. Problème de relation entre deux tables
    Par Laurentacs7 dans le forum Modélisation
    Réponses: 8
    Dernier message: 03/05/2014, 19h36
  2. [AC-2007] Probléme de relation entre deux tables
    Par zippi dans le forum Modélisation
    Réponses: 7
    Dernier message: 24/04/2011, 22h29
  3. problème de relation entre deux tables
    Par sky88 dans le forum Modélisation
    Réponses: 2
    Dernier message: 26/05/2009, 14h10
  4. Réponses: 5
    Dernier message: 14/08/2008, 10h13
  5. [DEBUTANT]Problème de relation entre deux tables
    Par Yomane dans le forum Schéma
    Réponses: 2
    Dernier message: 20/10/2006, 01h30

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