sql >> Databáze >  >> RDS >> Mysql

MySQL vyberte, kde v mnoha k mnoha

Za předpokladu, že chcete víc než jen ID článku:

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'

Pokud chcete pouze ID článku, zkuste toto:

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

Podívejte se na to v akci na http://sqlfiddle.com/#!2/9d213/4

Je třeba také dodat, že výhodou tohoto přístupu je, že může podporovat kontrolu libovolného počtu kategorií, aniž by bylo nutné měnit dotaz. Jednoduše vytvořte '1,2' řetězcovou proměnnou a změňte to, co se předává do dotazu. Takže můžete stejně snadno vyhledávat články s kategoriemi 1, 2 a 7 zadáním řetězce '1,2,7'. Nejsou potřeba žádná další připojení.



  1. Výpočet časového rozdílu před 6:00 a po 22:00 v MySQL

  2. Jaká jsou omezení MS Access?

  3. struktura mysql pro příspěvky a komentáře

  4. Jak optimalizovat zobrazení MySQL