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