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: тег2 Ресурс 4: тег1
Запрос должен вывести: 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?