Быстрое, хакерское решение состоит в том, чтобы заключить весь запрос во внешний запрос и возвращать только записи, содержащие соответствующий тег, используя WHERE tags LIKE '%....%
.Это хрупко, потому что всегда есть шанс, что у вас будет один тег (например, «ягода»), который является контейнером внутри другого (например, «клубника»).Есть способы обойти это, но они не очень красивы и не очень SQLish.
Немного более правильным (и одинаково непроверенным!) Решением было бы добавить исходный запрос в качестве подзапроса в предложении WHERE
:
WHERE EXISTS
(
SELECT
1
FROM
tbl_talks
LEFT JOIN tbl_linking_talk_tag
ON tbl_talks.talk_id = tbl_linking_talk_tag.talk_id
LEFT JOIN tbl_tag
ON tbl_linking_talk_tag.tag_id = tbl_tag.tag_id
WHERE
tbl_tag.tag_id IN (the, tag_ids, you, want)
)
Возможно, в MySQL существует более простой встроенный способ сделать это, но я этого не знаю.