Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 12/12/2012, 16h05   #1
nexuskmd
Invité de passage
 
Kevin Pire
Inscription : mars 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kevin Pire

Informations forums :
Inscription : mars 2010
Messages : 13
Points : 0
Points : 0
Par défaut Utiliser WHERE IN sur le résultat d'une requête pivot

Bonjour,

Je bloque sur une vilaine requête, voici mon cas :

Voici l'erreur : #1054 - Unknown column 'Email' in 'IN/ALL/ANY subquery'

Et la requête :

SELECT
GROUP_CONCAT( if( elementID =197, valeur, NULL ) ) AS 'Prénom',
GROUP_CONCAT( if( elementID =198, valeur, NULL ) ) AS 'Email'
FROM formulaires_entree_elements2
WHERE idParent
IN (
SELECT id
FROM formulaires_entrees2
WHERE idFormulaire = 4
)
AND Email
IN (
SELECT email
FROM client
WHERE id_ent = 540
)

GROUP BY idParent

Je me doute que ça ne fonctionne pas parce que Email n'existe pas dans la table formulaires_entree_elements2. Du coup ma question est : Comment puis-je filtrer le résultat de cette requête autrement utilisant mon IN à cet endroit?

D'avance merci
nexuskmd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 17h07   #2
nexuskmd
Invité de passage
 
Kevin Pire
Inscription : mars 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kevin Pire

Informations forums :
Inscription : mars 2010
Messages : 13
Points : 0
Points : 0
Est-ce que vous pensez que cela peut fonctionner? (Je ne sais pas tester pour le moment)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT * FROM (
SELECT 
   GROUP_CONCAT( IF( elementID =197, valeur, NULL ) ) AS 'Prenom',
   GROUP_CONCAT( IF( elementID =198, valeur, NULL ) ) AS 'Email'
FROM formulaires_entree_elements2
WHERE idParent
IN (
   SELECT id
   FROM formulaires_entrees2
   WHERE idFormulaire = 4
)
GROUP BY idParent) AS tempTable WHERE Email 
IN (
   SELECT email
   FROM client
   WHERE id_ent = 540
)
nexuskmd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 21h18   #3
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 566
Points : 25 566
Envoyer un message via MSN à CinePhil
Tu as simplement besoin d'apprendre les jointures !

De plus, évite de relancer la guerre des étoiles !

Ta requête semble traiter les données d'un formulaire ?
Pourquoi GROUP_CONCAT ? Pour récupérer une liste de prénoms et d'adrels ?

Bref, qu'est censée faire ta requête ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 12h41   #4
nexuskmd
Invité de passage
 
Kevin Pire
Inscription : mars 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Kevin Pire

Informations forums :
Inscription : mars 2010
Messages : 13
Points : 0
Points : 0
C'est mieux comme ça, je pense

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT t1.prenom, t1.email
FROM
(  SELECT 
   GROUP_CONCAT( IF( elementID =197, valeur, NULL ) ) AS 'prenom',
   GROUP_CONCAT( IF( elementID =198, valeur, NULL ) ) AS 'email'
FROM formulaires_entree_elements2
WHERE idParent
IN (
   SELECT id
   FROM formulaires_entrees2
   WHERE idFormulaire = 4
)
GROUP BY idParent ) t1
INNER JOIN (
SELECT email
   FROM client
   WHERE id_ent = 540
) t2 ON t1.email = t2.email
Merci pour tes conseils avisés.
nexuskmd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 12h46   #5
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 659
Points : 25 566
Points : 25 566
Envoyer un message via MSN à CinePhil
Cette requête me semble bien compliquée !

Qu'est-elle censée faire ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h19.


 
 
 
 
Partenaires

Hébergement Web