首先,这里是相关的表结构:
TUBE_VIDEOS
------
id
video_name
TAGS
----
id
tag_name
tag_type [either set to "actor" or "tag"]
TUBE_VIDEO_TAGS
----
tube_video_id
tag_id
我曾经问过一个关于如何使用这些数据来获取相关视频的问题:here - 此解决方案基本上采用了最常见类似标签的视频,以确定最相似的视频。从那以后,我的数据库被修改了一下,以显示标签描述的内容。例如,“Tom Cruise”设置为tag_type“actor”,而“explosion”设置为tag_type“tag”。我想做的是调整查询以权衡比标签更重的演员。基本上我们会对MySQL说:给我一个视频ID的列表,其中包含最匹配的演员,如果领带使用下一个最匹配的标签。
答案 0 :(得分:3)
你可以通过很多连接来做到这一点。以下查询以当前视频tv
开头。它会查找属于该视频的所有代码tvt
。然后,它会查找所有其他视频共享一个或多个标记rtvt
。对于相关视频,它会查找标记详细信息rt
和视频详细信息rtv
。
select rtv.video_name
, sum(case when rt.tag_type = 'actor' then 1 else 0 end) ActorCount
, sum(case when rt.tag_type = 'tag' then 1 else 0 end) TagCount
from tube_videos tv
left join tube_video_tags tvt
on tvt.tube_video_id = tv.id
left join tube_video_tags rtvt
on rtvt.tag_id = tvt.tag_id
and rtvt.tube_video_id <> tv.id
left join tags rt
on rt.id = rtvt.tag_id
left join tube_videos rtv
on rtv.id = rtvt.tube_video_id
where tv.id = <YourMovieId>
group by rtv.id, rtv.video_name
order by ActorCount desc, TagCount desc
在所有连接之后,您可以计算各种徽章类型并按顺序排列。