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」にアクセスし、それらの間の関係はvisitor_resourceに作成されます。
特定の「リソース」には、コンテンツに応じて2つの「タグ」があり、それらは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でも可能ですか?