Forums Développement Multimédia

Aller au contenu

[SQL] Problème de requête jointure

CODE PHP MySQL

1 réponse à ce sujet

#1 pbmaske

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3032 messages

Posté 13 February 2009 - 15:28 PM

Bonjour la communauté :D

Je viens à vous pour un problème de requête... C'est pas la première fois que je rencontre ce problème et j'ai toujours esquivé en imbriquant des requêtes, mais je suis certain qu'il est possible de faire ça en une seule requête. Bref les explications ^^
J'ai deux tables, l'une entité, et l'autre affectation.
La table entité simule une hiérarchie, elle contient des centres et des équipes, un centre contient au moins une équipe, et une équipe est rattachée à son centre grâce à une colonne 'parent', qui contient l'id du centre.
De l'autre côté je gère des personnes qui sont reliées à des équipes, il y a une possibilité que cette personne soit affectée à plusieurs équipes mais toujours à une seule équipe par centre.

Ce que je souhaite obtenir, c'est pour une personne donnée, avoir la liste de tous les centres auxquels celle ci est rattachée (par son équipe), mais en même temps avoir toutes les équipes de ce centre.
Voici ce que j'ai fait:
SELECT e.libelle AS libelleCentre, e.id AS idCentre, e2.libelle AS libelleEquipe, e2.id AS idEquipe, a.id AS id_affectation
FROM entite AS e
JOIN entite AS e2 ON e2.parent=e.id
LEFT OUTER JOIN affectation AS a ON a.id_entite=e2.id
WHERE e2.niveau='Equipe' AND id_personnel='9'
ORDER BY e.libelle
Mais je n'obtiens que les équipes pour lesquelles la personne (dont l'identifiant est 9) a une affectation, hors je voudrais toutes les équipes de ces centres (et pouvoir ensuite différencier en php les équipes avec lesquelles il a une affectation d'où l'essai de récupérer 'a.id AS id_affectation').

Par avance merci à ceux qui se pencheront sur mon problème :)

#2 Ldo

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 9921 messages

Posté 14 February 2009 - 10:45 AM

à mon avis tu dois partir sur des requêtes imbriquée
WHERE IN (SELECT ...)
va faire un tour dans la doc

à titre d'exemple, je sélectionne des champs dans trois table avec ça
SELECT * FROM `item` WHERE `itemId` IN (SELECT r.`itemId` FROM `relation` AS r, `tag` AS t WHERE r.`tagId` = t.`tagId` AND t.`tagName` = 'php') ORDER BY `pubDate` DESC;



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP