Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/05/2011, 09h25   #1
Invité de passage
 
Inscription : mai 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 3
Points : 1
Points : 1
Par défaut Requête avec condition en AND sur deux tables

Bonjour à tous,

Je viens vers vous car je suis face à une requête sur laquelle je bloque.

Voici un extrait de ma base avec les trois tables concernées qui modélisent le fait qu'un correspondant peux posséder plusieurs compétences affinées (commp_aff) et qu'une compétence affinée peut-être possédée par plusieurs correspondant.

Les deux autres clefs étrangères : ID_Organisme_FK, et ID_Champ_Comp_FK modélisent le fait qu'un correspondant travail pour un organisme et un seul et qu'une compétence affinée fait partie d'un champ de compétences.

----------------- Début : Les trois tables --------------------

correspondant(ID_Cor,ID_Organisme_FK,Civil_Cor,Nom_Cor,Prenom_Cor,Tel_Cor,Fax_Cor,Port_Cor,Mail_Cor,Login,Pwd,Droits,Etat)

asso_cor_comp_aff(ID_Asso_Cor_Comp_aff,ID_Cor_FK,ID_Comp_aff_FK)

comp_aff(ID_Comp_aff,ID_Champ_Comp_FK,Descriptif_aff)

----------------- Fin : Les trois tables --------------------

Je cherche à obtenir : "Les correspondants qui possèdent la compétence affinée 1 ET la compétence affinée 3 ET la compétence affinée 7"

En fait il peut y avoir plusieurs compétence affinée qui doivent s'enchainer avec un ET

Et là je bloque ... toutes les requêtes que j'ai tenté n'aboutissent pas.

Avez-vous une idée svp ?

Par avance merci à ceux qui pourront m'aider.
sologne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 10h49   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Saluton,
Je pense à quelque chose comme ça
Code sql :
1
2
3
4
5
SELECT  ID_Cor
FROM correspondant AS c
INNER JOIN  asso_cor_comp_aff AS a1 ON c.ID_Cor=a1.ID_Cor AND a1. ID_Comp_aff_FK=1
INNER JOIN  asso_cor_comp_aff AS a2 ON c.ID_Cor=a2.ID_Cor AND a2. ID_Comp_aff_FK=3
INNER JOIN  asso_cor_comp_aff AS a3 ON c.ID_Cor=a3.ID_Cor AND a3. ID_Comp_aff_FK=7
__________________
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)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 10h52   #3
Invité de passage
 
Inscription : mai 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 3
Points : 1
Points : 1
Re bonjour,
A force de chercher, je viens d'écrire cela qui fonctionne pour 2 conditions :
Code :
1
2
3
4
5
6
7
8
9
 
SELECT ID_Cor_FK
FROM asso_cor_comp_aff
WHERE ID_Comp_aff_FK =10
AND ID_Cor_FK IN (
	SELECT ID_Cor_FK
	FROM asso_cor_comp_aff
	WHERE ID_Comp_aff_FK =13
)
et cela qui fonctionne pour 3 conditions :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT ID_Cor_FK
FROM asso_cor_comp_aff
WHERE ID_Comp_aff_FK =10
AND ID_Cor_FK IN (
	SELECT ID_Cor_FK
	FROM asso_cor_comp_aff
	WHERE ID_Comp_aff_FK =13
	AND ID_Cor_FK IN (
		SELECT ID_Cor_FK
		FROM asso_cor_comp_aff
		WHERE ID_Comp_aff_FK =17
	)
)
Par contre l'utilisateur peux cocher jusqu'à 30 conditions ...
Donc avez-vous une idée pour écrire cela plus simplement car je vais avoir une requête qui va exploser ...
sologne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 11h09   #4
Invité de passage
 
Inscription : mai 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 3
Points : 1
Points : 1
Par défaut [Résolu]

Merci Maljuna Kris,

la solution que tu proposes me simplifie terriblement la solution que je venais te trouver juste après toi, et est donc meilleur.
J'ai juste apporté une petite correction car la référence à la clé étrangère dans la table associative n'était pas la bonne.
Voici donc la requête finale qui tourne. (Je viens de la tester)
Code :
1
2
3
4
5
6
 
SELECT  ID_Cor
FROM correspondant AS c
INNER JOIN  asso_cor_comp_aff AS a1 ON c.ID_Cor=a1.ID_Cor_FK AND a1.ID_Comp_aff_FK=1
INNER JOIN  asso_cor_comp_aff AS a2 ON c.ID_Cor=a2.ID_Cor_FK AND a2.ID_Comp_aff_FK=3
INNER JOIN  asso_cor_comp_aff AS a3 ON c.ID_Cor=a3.ID_Cor_FK AND a3.ID_Comp_aff_FK=7
Encore merci de ton aide

Cordialement,
Sologne
sologne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h34.


 
 
 
 
Partenaires

Hébergement Web