需要亲手为相关视频编写MySQL查询

时间:2009-11-28 20:14:27

标签: mysql

首先,这里是相关的表结构:

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的列表,其中包含最匹配的演员,如果领带使用下一个最匹配的标签。

1 个答案:

答案 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

在所有连接之后,您可以计算各种徽章类型并按顺序排列。