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:TAG1,TAG2 资源2:TAG1 资源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?
啊。我不知道,但这是有道理的!感谢您的建议。 – 2011-04-21 14:18:07