提问人:Andrew G. Johnson 提问时间:11/29/2009 最后编辑:CommunityAndrew G. Johnson 更新时间:11/29/2009 访问量:314
需要为相关视频编写 MySQL 查询
Need a hand writing a MySQL query for related videos
问:
所以首先这里是相关的表格结构:
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列表,如果出现平局,则接下来使用最匹配的标签。
答:
3赞
Andomar
11/29/2009
#1
你可以通过大量的连接来做到这一点。以下查询从当前视频开始。它查找属于该视频的所有标签。然后它会查找所有其他视频共享一个或多个标签。对于相关视频,它会查找标签详细信息和视频详细信息。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
完成所有连接后,您可以计算各种徽章类型并按它们排序。
评论
0赞
Andrew G. Johnson
11/29/2009
太棒了,谢谢伙计。您在我修复的 where 子句中犯了一个小错别字,所以我只能给你 99% 的赋值:)
评论