电视节目建议算法和SQL

时间:2009-11-23 09:30:01

标签: php sql mysql

有些用户可以通过ID引用,如下表所示:

users:
user_id

我尝试过跟踪节目观看的解决方案

tvshow_hits:
user_id|show_id

还有一个包含详细信息的表格:

tvshows:
show_id|name

但这并不是必须的,我愿意改变。我觉得没有必要更多地跟踪个人观点,如果他们看过它,因为不像音乐电视节目和电影只观看一次,如果他们再次观看他们没有任何“重量”。

所以现在我会倒退: 结果页面应如下所示:

观看的人也会观看

South Park 40%
Family Guy 20%
Something 10%

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

选择节目(按照 P DESC的顺序),与其他节目相比观看的人数(已观看过的用户观看过的节目数量) )百分比形式AS P WHERE 观看了 LIMIT x

的用户观看了节目

我希望这是我解释它的最佳方式,并且可以自由地想出另一种方法去做我想做的事情。欢迎提出所有建议和帮助。

2 个答案:

答案 0 :(得分:1)

没有经过测试但是这样的事情:

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_hits和显示详细信息表的视图)以及观看它的人数。然后,您可以获取另一个查询中的用户总数,以计算出您的百分比。

<强>更新
您的tvshowhitdetails视图如下所示:

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

答案 1 :(得分:1)

从节目开始,您可以查看观看该节目的其他用户。然后,您可以查看其他用户观看的节目。按其他节目对其进行分组,并通过除以所选节目的观察者总数来计算百分比。

以下是一个示例查询:

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