sql >> Databasteknik >  >> RDS >> Mysql

MySQL Välj Where In Many to Many

Förutsatt att du vill ha mer än bara artikelns id:

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'

Om allt du vill ha är artikelns id, prova detta:

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

Se den i aktion på http://sqlfiddle.com/#!2/9d213/4

Ska också tillägga att fördelen med detta tillvägagångssätt är att det kan stödja kontroll av valfritt antal kategorier utan att behöva ändra frågan. Gör bara '1,2' till en strängvariabel och ändra vad som skickas in i frågan. Så du kan lika gärna söka efter artiklar med kategorierna 1, 2 och 7 genom att skicka en sträng med "1,2,7". Inga ytterligare anslutningar behövs.



  1. Använd två tabeller på en php-sida (mysql)

  2. Uppdatera summan baserat på föregående saldorad

  3. Vad är anslutningssträngen för localdb för version 11

  4. Php/ MySql 'Avancerad sökning'-sida