Фильтр по двум системам тегов - PullRequest
0 голосов
/ 04 марта 2019

У меня есть отношение post и tag_system_one и tag_system_two.

Существует отношение многие ко многим между post и tag_system_one - tag_system_one_post.

Существует отношение "многие ко многим" между post и tag_system_two - tag_system_two_post.

Я бы хотел запрос SQL для поиска по нескольким тегам.

Когда естьтолько одна система тегов, запрос довольно прост:

SELECT post.*
FROM post
JOIN tag_system_one_post ON post.id = tag_system_one_post.fk_post
JOIN tag_system_one ON tag_system_one_post.fk_tag_system_one = tag_system_one.id
WHERE tag_system_one.id IN (500, 533)
GROUP BY post.id
HAVING COUNT(*) = 2;

В этом примере он получает все сообщения с двумя тегами 500 и 533 (пересекаются).

Posts that only have tag `500` but not `533` will not be shown.

Я могу применить приведенное выше утверждение, потому что я использую COUNT(*) = 2.Но это не сработает, когда я представлю другую систему тегов (tag_system_two).

Есть ли способ сделать это без подзапроса?

1 Ответ

0 голосов
/ 04 марта 2019

Подумав некоторое время, я думаю, что решение:

HAVING COUNT(*) = 
no. of items selected in tagging_system_one 
MULTIPLIED BY
no. of items selected in tagging_system_two
...