Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL Sélectionnez Where In Many to Many

En supposant que vous souhaitiez plus que l'identifiant de l'article :

SELECT a.id
      ,a.other_stuff
  FROM articles a
  JOIN article_category ac
    ON ac.article_id = a.id
GROUP BY a.id
HAVING GROUP_CONCAT(DISTINCT ac.category_id ORDER BY ac.category_id SEPARATOR ',') = '1,2'

Si tout ce que vous voulez, c'est l'identifiant de l'article, essayez ceci :

SELECT article_id
  FROM article_category 
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'

Voyez-le en action sur http://sqlfiddle.com/#!2/9d213/4

Il convient également d'ajouter que l'avantage de cette approche est qu'elle peut prendre en charge la vérification d'un nombre quelconque de catégories sans avoir à modifier la requête. Faites simplement de '1,2' une variable de chaîne et modifiez ce qui est transmis à la requête. Ainsi, vous pouvez tout aussi facilement rechercher des articles avec les catégories 1, 2 et 7 en passant une chaîne de '1,2,7'. Aucune jointure supplémentaire n'est nécessaire.