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

Requêtes MySQL Discussion :

Jointures 5 tables / Blocage


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut Jointures 5 tables / Blocage
    Salut à tous !

    Voilà, je dois faire une requête afin de récupérer 3 données, celle-ci se trouvant dans des tables différentes. De plus, je suis obligé de passer par des tables intermédiaires afin de pouvoir afficher mon résultat, et je dois dire que je bloque un peu en ce moment...

    Voici mon schéma :

    contactgroup_service_relation
    cg_id
    service_id

    host
    host_id
    host_name *

    host_service_relation
    host_id
    service_id

    service
    service_id
    service_description *

    contactgroup
    cg_id
    cg_name *

    Voilà, vous trouverez en gras les noms de tables, en couleurs les attributs communs de chaque tables et l'asterisk correspond aux attributs que je veux afficher (donc 3 en tout)

    Concrètement, ces tables font partie d'oréon (logiciel de supervision) et je voudrais afficher le nom de machine, la description de service associée et enfin le nom du groupe qui s'occupe de cette machine.
    Je le veux bien entendu pour chaque machine.

    Actuellement, j'effectue cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT host.host_name, service.service_description, contactgroup.cg_name
    FROM host
    INNER JOIN host_service_relation ON ( host.host_id = host_service_relation.hsr_id ) 
    INNER JOIN service ON ( service.service_id = host_service_relation.service_service_id ) 
    INNER JOIN contactgroup_service_relation ON ( service.service_id = contactgroup_service_relation.service_service_id ) 
    INNER JOIN contactgroup ON ( contactgroup_service_relation.contactgroup_cg_id = contactgroup.cg_id )
    Malheureusement, cette requête ne m'affiche pas toute les informations nécessaires : en effet, je suis bloqué à un seul groupe de contact, je ne possède donc pas toute les machines.
    Je ne comprends pas en quoi je demande de n'afficher qu'un seul groupe de contact...

    Voilà, si quelqu'un peu m'aiguiller (ça me gave de pas trouver tout seul déjà :/), je veux bien un petit coup de main !

    Merci d'avance !

    Edit : voilà ce que j'obtiens pour le moment ;

    host_name service_description cg_name
    Machine1 Svc_Mysql_Arcelor Support_24x7
    Machine2 Svc_logon_AFIC Support_24x7
    Machine3 Svc_Mysql_matra Support_24x7
    Machine4 Svc_Mysql_fgame Support_24x7
    Machine5 Svc_FTP Support_24x7
    Machine6 Svc_Mysql_cstn Support_24x7

    Le problème est que j'ai beaucoup plus de host_name dans ma base. Le tri semble se faire uniquement sur le goupe Support_24x7 alors que j'en ai bien d'autre...

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Ce qui ne semble pas coller entre ta description des tables et ton souhait c'est que la relation entre group et host n'existe qu'au travers de service.
    Comme tu ne nous fournis aucune précision quant aux cardinalités de ces relations, il est difficile de te répondre.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Pour t'aider plus facilement, un petit jeu de données (et un petit exemple de ce que tu obtiens et de ce que tu souhaites obtenir) nous permettrait d'y voir sûrement plus clair.

    Toutefois, il y a au moins une bizarrerie dans la première jointure de ta requête, entre les tables host et host_service_relation.
    En effet, la jointure se fait sur le champ hsr_id du côté de la table host_service_relation. Hors, d'après le schéma que tu nous donnes, ce serait plutôt sur le champ host_id.

    De même, tu ne parles pas du champ service_service_id mais juste d'un champ service_id dans cette table.
    Le schéma que tu nous a donné est-il juste ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut
    J'ai éditer mon premier post avec ce que j'obtiens en ce moment.

    Dans le schéma que je vous donne, j'ai modifier le nom des attributs pour simplifier car ils ont des noms différents dans chaque tables de la base, mais ce sont bien les mêmes...

    Ce que je voudrais, c'est la liste de TOUTE les machines, avec la description et le groupe contact associé.
    Pour le moment je n'affiche que les machines du groupe support Support_24x7

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Par défaut
    AAAAHHHH !

    Bon j'ai trouvé le problème...

    Comme a dit ced, c'est au niveau de hsr_id qu'il y avait soucis.

    Comme je disais, les attributs n'ont pas le même nom suivant les tables (chaque attribut est précédé des initiales de la table ou il se trouve), du coup j'étais persuadé que hsr_id était l'équivalent de host_id.

    Quand j'ai regardé chaque attribut de la table host_service_relation, y'avait bien un attribut host_host_id...

    J'ai confondu en fait :/

    Bref désolé pour cette perte de temps, d'un autre côté je ne l'aurai pas trouvé si on ne m'avait pas fait la remarque

    Merci à vous !

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

Discussions similaires

  1. Jointure de table avec Interbase
    Par ada_b dans le forum InterBase
    Réponses: 21
    Dernier message: 12/05/2010, 19h52
  2. Réponses: 7
    Dernier message: 10/02/2005, 00h13
  3. [FB1.5]Vue avec jointure sur tables ?
    Par Sitting Bull dans le forum SQL
    Réponses: 2
    Dernier message: 07/12/2004, 17h07
  4. jointure sur table et procedure stocké
    Par pram dans le forum SQL
    Réponses: 3
    Dernier message: 18/11/2004, 21h56
  5. requete(jointure 2 tables) qui marche pas
    Par DaxTaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2004, 17h50

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