MySQL SELECT из нескольких значений, возвращает только точные соответствия

У меня есть запрос, который принимает идентификаторы тегов, полученные из предыдущего запроса, и выбирает идентификаторы post из таблицы post_tag_map.

$ tagIds, например, может быть чем-то вроде "3,4,23,54" .

 'SELECT post_id FROM post_tag_map WHERE tag_id IN (' . $tagIds . ') ORDER BY `post_id`;' 

Этот запрос отлично подходит для своей цели, но он возвращает любой post_id, который имеет любую из этих тегов.

Я пытаюсь получить только post_ids, которые содержат ВСЕ те теги tag_ids.

Например, если я ищу «новости, политику, кампанию», я хочу только вернуться к сообщениям, отмеченным всеми тремя тегами, а не сообщениями, имеющими один из трех.

Как я могу изменить свой запрос?

Изменить: по запросу моя таблица имеет три таблицы. Один (сообщение) с сообщением post_id и сообщением, один (тег) с tag_id и tag_name, и post_tag_map, просто сопоставляет два идентификатора вместе.

Ну, это будет немного сложнее

Следите за своей записью IN, а также за сообщениями группы, чтобы найти те,

 WHERE tag_id IN (3,4,23,54) GROUP BY `post_id` HAVING count(1) = 4; 

где 4 – это количество тегов, которые мы ищем