Я хотел бы иметь возможность получать строки из таблицы «статьи» на основе двух «категорий», однако у меня возникают проблемы с моими объединениями. Вот что мои таблицы будет выглядеть следующим образом:MySQL Присоединиться к двум строкам
`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`) )
Теперь то, что я хотел бы быть в состоянии сделать, это получить все статьи, которые находятся в обеих категориях 3 и 5 (или неограниченное количество категорий). Я думал, что я мог бы сделать что-то вроде этого:
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)
Просто для уточнения я не хочу статей, которые находятся или 3 или 5, но ОБА 3 и 5.
Я думаю, что это одна из тех действительно простых вещей, которые я как-то упустил из-за усталости или чего-то еще.
Либо это, либо я в буквальном смысле придется сделать еще один присоединиться к каждой категории, которую я хочу включать например:
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)
Но я уверен, что есть более простое решение, что это.
Так же, как и мой пример на дне? Я просто предположил, что может быть лучшее решение, что, если, например, я хотел использовать 10 категорий, для этого потребуется 10 объединений. – robjbrain
выберите * из статей, где article_id в (выберите article_id из articles_categories, где category_id в (3, 5, 7, 9, 11)) – Jarek