Решение состоит в следующем: SQL Запрос не с одним, а с двумя объединениями в таблице соединений. Я не знаю, какое это существенное различие, но, очевидно, для базы данных оно действительно имеет одно значение, даже если он может сопоставлять статьи с тегами уже с одним join
.
SELECT
`articles`.*
FROM `articles`
JOIN `taggings`
ON `articles`.`id` = `taggings`.`taggable_id`
JOIN `tags` ON `taggings`.`taggable_id` = `tags`.id
WHERE `tags`.`id` in (1,2,3)
GROUP BY `articles`.id
HAVING( COUNT(`tags`.`id`) = 3);
Таким образом, когда у вас есть две статьи, article-one и article-two, где article-one совпадает с tag1, tag2, tag3 и article-two также совпадают с tag1, tag2, tag3 и над этим tag4, запрос возвращает только article-one. Соединение - это «это» and
«не более», а не or
Ваш
vonSpotz