代码之家  ›  专栏  ›  技术社区  ›  Andrew G. Johnson

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

  •  1
  • Andrew G. Johnson  · 技术社区  · 15 年前

    因此,首先是相关的表结构:

    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”被设置为标记“actor”,“explosion”被设置为标记“tag”。我想做的是调整查询,使其权重大于标记。所以本质上,我们会对MySQL说:给我一个视频ID列表,其中包含最匹配的演员,如果是TIE,那么接下来使用最匹配的标签。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Andrew G. Johnson    15 年前

    你可以通过大量的连接来做到这一点。以下查询以当前视频开始 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
    

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