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

Need a hand writing a MySQL query for related videos

提问人:Andrew G. Johnson 提问时间:11/29/2009 最后编辑:CommunityAndrew G. Johnson 更新时间:11/29/2009 访问量:314

问:

所以首先这里是相关的表格结构:

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

不久前,我问过一个问题,关于如何使用这些数据来获取相关视频: 在这里 -- 这个解决方案基本上是采用带有最常见相似标签的视频来决定哪些是最相似的。从那时起,我的数据库进行了一些修改,以显示标签所描述的内容。例如,“汤姆·克鲁斯”被设置为“演员”tag_type而“爆炸”被设置为tag_type“标签”。我想做的是调整查询以权衡比标记更重的参与者。因此,从本质上讲,我们会对MySQL说:给我一个具有最匹配演员的视频ID列表,如果出现平局,则接下来使用最匹配的标签。

MySQL的

评论


答:

3赞 Andomar 11/29/2009 #1

你可以通过大量的连接来做到这一点。以下查询从当前视频开始。它查找属于该视频的所有标签。然后它会查找所有其他视频共享一个或多个标签。对于相关视频,它会查找标签详细信息和视频详细信息。tvtvtrtvtrtrtv

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

完成所有连接后,您可以计算各种徽章类型并按它们排序。

评论

0赞 Andrew G. Johnson 11/29/2009
太棒了,谢谢伙计。您在我修复的 where 子句中犯了一个小错别字,所以我只能给你 99% 的赋值:)