Доброе времени суток , есть 3 таблицы
news
id|text
tags
id|name
news_tags
id|tag_id|news_id
нужно собрать выбору новостей по тегам, основной тег + дополнительный тег , для примера, выбрать новости с тегом "животные" и "кроты", тег "кроты" может присутствовать так и нет (то есть все запись с тегом "животные" и , "животные" и "кроты" в паре) , есть решение через UNION но думаю оно здесь избыточно.
UPD наверно немного не верно задал вопрос , будет наверно понятней на примере
если мы задаём выборку по 2 тегам "животные" "кроты" должны быть новости
где тег только "животные", где теги парой "животные" "кроты", не подходят набор тегов в новостях как "животные" "коты" или "коты" "кроты"
выходит что то вроде такого , но думаю это не лучшее решение
SELECT news_id FROM news_tags WHERE tag_id = "id тега животное" OR tag_id = "id тега кроты" GROUP BY news_id HAVING COUNT(news_id) = 2; --находим пару животное кроты
UNION
SELECT news_id FROM news_tags WHERE tag_id = "id тега животное" AND news_id not in (SELECT news_id FROM news_tags WHERE tag_id in ("все теги в системе")); -- находим все новости с тегом животные и только ним больше у новости не может быть другого тега.