MySQL Help requête²

WRInaute discret
Soit:

SELECT id_contact, COUNT(id_contact) FROM Table WHERE id_zone IN (3,6) GROUP BY id_contact
HAVING COUNT(id_contact) > 1

Me permet de récuperer un contact habitant dans la zone 1 et la zone 6.

Mais comment exclure un contact_id qui serait dans la zone 9 tant bien même il soit présent dans 3 et 6 ?

Je sèche!
 
WRInaute passionné
et si tu rajoute un :
WHERE id_contact NOT IN ( SELECT id_contact FROM Table WHERE id_zone = 9 GROUP BY id_contact )
 
WRInaute discret
Ca peut fonctionne comme ça le souci est que sur un grand nombre de critère ça finirait par devenir une usine à gaz, une solution a été trouvé avec concat_group
 
WRInaute accro
Tomybe a dit:
solution a été trouvé avec concat_group
ça serait bien que tu donne l'équivalent de ta requête de départ ça permettrait d'avoir un topic avec réponse :wink: (et en plus je suis curieux de nature)
 
WRInaute discret
Alors tu a une table comme ça :

contact_id | id_zone
10 5
10 6
10 8
10 9

Le but du jeu étant de récupérer tous les contacts présent dans la id_zone 5 et 6

Mais il peut arriver qu'on veuille prendre tous les contacts dans la id_zone 5 et 6 sauf si il sont aussi dans la id_zone 8

La première solution était
Code:
SELECT id_contact, COUNT(id_contact) FROM Table WHERE id_zone IN (3,6) GROUP BY id_contact 
HAVING COUNT(id_contact) > 1

On compte le nombre de fois ou le id_contact apparait pour s'assurer qu'il soit bien présent dans les deux zones que l'on souhaite.

Le problème venait ensuite de filtrer ceux qui aurait été présent dans la 8

là j'utilise un select concat_group(id_zone) as groupzone et dans le having groupzone like '3' and like '6' and not like '8' (en gros) et ça marche nickel
 
WRInaute discret
Pour exclure la zone 8 je pense que tu peux ajouter NOT IN() :
Code:
AND NOT IN  (8) ou alors AND NOT IN  (SELECT `id_contact` FROM `Table` WHERE id_zone = 8)
Bon faut tester...
 
WRInaute discret
Oui mais mais il peut y avoir autant d'exclusion que possible... et ça fait x select par inclusion/exclusion ça devient une véritable usine à gaz au finale. avec le concat_group on retourne un champ contenant toutes les zones séparé par des virgules et avec le having like les critères peuvent évolué pour facilement
 
Discussions similaires
Haut