代码之家  ›  专栏  ›  技术社区  ›  steven

电视节目推荐算法与SQL

  •  0
  • steven  · 技术社区  · 16 年前

    有一些用户可以通过下表中的id进行引用:

    users:
    user_id
    

    我尝试了一种跟踪节目视图的解决方案

    tvshow_hits:
    user_id|show_id
    

    还有一个表,其中包含详细信息:

    tvshows:
    show_id|name
    

    所以现在我将反向工作: 生成的页面应如下所示:

    South Park 40%
    Family Guy 20%
    Something 10%
    

    所以,我需要的是一个查询和(如果需要的话)PHP代码

    挑选 P 与其他节目(已观看的用户观看过的节目)相比,观看该节目的人数百分比如下: 哪里 该节目已被观看过的用户观看 极限x

    2 回复  |  直到 16 年前
        1
  •  1
  •   jammus    16 年前

    未测试,但类似于以下内容:

    SELECT name, Count(1) AS no_users
        FROM
            tvshowhitdetails 
        WHERE
            userid IN (
                SELECT userid
                   FROM
                       tvshow_hits
                   WHERE
                       showid = @showid
                  )
            AND
            showid <> @showid
    GROUP BY
        name
    ORDER BY
        no_users DESC
    

    会给你一个节目的名字( tvshowhitdetails 下面是一个视图,它加入了您的show(点击和show details表)和观看人数。然后,您可以在另一个查询中获得用户总数,以计算出您的百分比。

    更新

    CREATE VIEW tvshowhitdetails
    AS
    SELECT     tvshow_hits.UserId, tvshow_hits.ShowId, tvshows.Name
         FROM         tvshow_hits LEFT OUTER JOIN
                      tvshows ON tvshow_hits.ShowId = tvshows.ShowId
    
        2
  •  1
  •   Andomar    16 年前

    从该节目开始,您可以查找观看该节目的其他用户。然后你可以查看其他用户观看的节目。按另一个节目分组,然后除以所选节目的观众总数来计算百分比。

    select
        other_shows.showid as ShowId
    ,   COUNT(other_shows.userid) / (
            select count(*) from tvshows_hits where showid = @showid 
            ) as Percentage
    from tvshows_hits other_users
    inner join tvshows_hits other_shows
        on other_shows.userid = other_users.userid
        and other_shows.showid <> @showid
    where other_users.showid = @showid
    and other_users.userid <> @userid
    group by other_shows.showid
    
    推荐文章