У меня есть запрос, который принимает идентификаторы тегов, полученные из предыдущего запроса, и выбирает идентификаторы 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 – это количество тегов, которые мы ищем