SELECT t.tag_name
FROM tags t
JOIN resource_tags rt ON rt.tag_id = t.tag_id
JOIN resource r ON r.resource_id = rt.resource_id
JOIN visitor_resource vr ON vr.resource_id = rt.resource_id
JOIN visitor v ON v.visitor_id = vr.visitor_id
WHERE v.visitor_id = '1'
GROUP BY t.tag_name
Как вы можете видеть, «посетитель» посещает «ресурс», и связь между ними будет создана в visitor_resource.
В данном «ресурсе» есть пара «тегов» в зависимости от содержимого, и они связаны вместе отношением в resource_tags.
Приведенный выше запрос выводит имена тегов для всехресурсы, которые посетитель посетил.
Теперь я хочу узнать, сколько раз представлен тег.
Рассмотрим следующее: Ресурс 1: тег1, тег2 Ресурс 2: тег1 Ресурс 3: tag2 Ресурс 4: tag1
Запрос должен вывести: tag1, 3 tag2, 2
Я пробовал следующее:
SELECT t.tag_name, SUM(t.tag_id) as cnt
FROM tags t
JOIN resource_tags rt ON rt.tag_id = t.tag_id
JOIN visitor_resource vr ON vr.resource_id = rt.resource_id
JOIN visitor v ON v.visitor_id = vr.visitor_id
WHERE v.visitor_id = '2'
GROUP BY t.tag_name
Но, похоже,исключительно неоправданно большие числа для cnt, не считая этого конкретного пользователя.
Возможно ли это даже с MySQL?