Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Select Where In Many to Many

Angenommen, Sie möchten mehr als nur die ID des Artikels:

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'

Wenn Sie nur die ID des Artikels wollen, versuchen Sie Folgendes:

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

Sehen Sie es in Aktion unter http://sqlfiddle.com/#!2/9d213/4

Es sollte auch hinzugefügt werden, dass der Vorteil dieses Ansatzes darin besteht, dass er die Überprüfung einer beliebigen Anzahl von Kategorien unterstützen kann, ohne dass die Abfrage geändert werden muss. Machen Sie einfach '1,2' zu einer String-Variablen und ändern Sie, was an die Abfrage übergeben wird. Sie können also genauso einfach nach Artikeln mit den Kategorien 1, 2 und 7 suchen, indem Sie die Zeichenfolge „1,2,7“ übergeben. Es sind keine zusätzlichen Verknüpfungen erforderlich.