Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Seleziona dove in molti a molti

Supponendo che tu voglia qualcosa di più del semplice ID dell'articolo:

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'

Se tutto ciò che desideri è l'ID dell'articolo, prova questo:

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

Guardalo in azione su http://sqlfiddle.com/#!2/9d213/4

Dovrebbe anche aggiungere che il vantaggio di questo approccio è che può supportare il controllo di un numero qualsiasi di categorie senza dover modificare la query. Basta rendere '1,2' una variabile stringa e modificare ciò che viene passato nella query. Quindi, puoi cercare facilmente gli articoli con le categorie 1, 2 e 7 passando una stringa di "1,2,7". Non sono necessari ulteriori join.