Bonjour, J'ai quelques soucis avec une requête SQL qui ne devrait normalement poser aucun problème... Deux tables sont prises en compte : magasin id_magasin nom_magasin** detail_magasin id_magasin service_propose prix_service** Je propose tous les services existants à l'utilisateur à travers une liste de checkbox. A partir de là, j'aimerais faire une requête qui me donne le nom du magasin (ou juste l'id pour l'instant) quand je coche tous les services qu'il propose. Exemple: Un magasin X propose quatre services en tout. J'aimerais que récupérer son nom **si et seulement si** ces quatre services ont été cochés. J'ai essayé en liant des sous-requêtes avec des UNION ou des INTERSECT mais sans succès.. Merci d'avance !

3 réponses


Grafikart
Réponse acceptée

Essai un truc du style :

SELECT magazin_id
FROM detail_magasin
WHERE service_propose IN (.., .., .., ..)
GROUP BY magazin_id
HAVING COUNT(magazin_id) = (nombre de choix coché)
Just4u
Auteur
SELECT *
FROM magasin 
WHERE id_magasin IN (
  (SELECT id_magasin FROM magasin_detail WHERE service_propose = 'a' AND prix_service = '1')
  INTERSECT
  (SELECT id_magasin FROM magasin_detail WHERE service_propose = 'b' AND prix_service = '2')
  INTERSECT
  (SELECT id_magasin FROM magasin_detail WHERE service_propose = 'c' AND prix_service = '3')
  INTERSECT
  (SELECT id_magasin FROM magasin_detail WHERE service_propose = 'd' AND prix_service = '4')
  INTERSECT
  (SELECT id_magasin FROM magasin_detail WHERE service_propose = 'e' AND prix_service = '5')
)

Ce code aurait pu fonctionner, mais si, dans la condition, j'enlève un des services proposés par le magasin, il me le propose quand même...

Just4u
Auteur

J'ai eu du mal mais au final la requête fonctionne parfaitement bien avec cette méthode!!
Merci beaucoup!