Vérifier l'existence de plusieurs lignes dans une table

Par Just4u, il y a 13 ans


Base de données MySQL

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

Just4u, il y a 13 ans
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...

Grafikart, il y a 13 ans

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, il y a 13 ans

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