J'aimerais pouvoir obtenir des lignes d'une table "articles" basée sur deux "catégories" mais j'ai des problèmes avec mes jointures. Voici ce que mes tables ressemblerait à ceci:MySQL Joindre sur deux lignes
`articles` ( `article_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `article_name` varchar(255) NOT NULL PRIMARY KEY (`article_id`) )
`article_categories` ( `article_id` smallint(5) unsigned NOT NULL, `category_id` smallint(5) unsigned NOT NULL UNIQUE KEY `article_category_id` (`article_id`,`category_id`), KEY `article_id` (`article_id`), KEY `category_id` (`category_id`) )
Maintenant, ce que je voudrais être en mesure de faire est d'obtenir tous les articles qui sont dans les deux catégories 3 et 5 (ou un nombre illimité de catégories). Je pensais que je pouvais faire quelque chose comme ceci:
SELECT * FROM articles a INNER JOIN article_categories ac ON ac.article_id = a.article_id WHERE (ac.category_id = 3 AND ac.category_id = 5)
Juste pour que je ne veux pas préciser les articles qui sont en 3 ou 5, mais les deux 3 et 5.
Je pense que cela est une de ces choses vraiment simples que j'ai ratées en raison de la fatigue ou de quelque chose.
Soit ça ou je vais devoir littéralement faire une autre pour rejoindre toutes les catégories que je veux inclure par exemple:
SELECT a.* FROM articles a INNER JOIN article_categories ac ON ac.article_id = a.article_id INNER JOIN article_categories ac2 ON ac2.article_id = a.article_id WHERE (ac2.category_id = 3 AND ac.category_id = 5)
Mais je suis sûr qu'il ya une solution plus simple que cela.
donc la même chose que mon exemple au fond? J'ai juste supposé qu'il pourrait y avoir une meilleure solution, et si, par exemple, je souhaitais utiliser 10 catégories, cela nécessiterait 10 jointures. – robjbrain
sélectionner * à partir d'articles où article_id dans (select article_id from article_categories où category_id dans (3, 5, 7, 9, 11)) – Jarek