sql >> Database >  >> RDS >> Mysql

MySQL Selecteer waar in veel tot veel

Ervan uitgaande dat u meer wilt dan alleen de id van het artikel:

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'

Als je alleen de ID van het artikel wilt, probeer dan dit:

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

Zie het in actie op http://sqlfiddle.com/#!2/9d213/4

Moet er ook aan toevoegen dat het voordeel van deze aanpak is dat het het controleren van een willekeurig aantal categorieën kan ondersteunen zonder de query te hoeven wijzigen. Maak gewoon '1,2' een stringvariabele en verander wat er in de query wordt doorgegeven. U kunt dus net zo gemakkelijk artikelen zoeken met de categorieën 1, 2 en 7 door een string van '1,2,7' door te geven. Er zijn geen extra joins nodig.



  1. Is er een manier om de laatst ingevoegde id van een NIET - automatisch oplopende kolom in MySQL te krijgen?

  2. meerdere afbeeldingen uploaden verkeerde hoeveelheid bij bestandsupload

  3. Aanroep naar ongedefinieerde functie session_register()

  4. XML-gegevens opslaan in SQL Server