可以通过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的顺序),与其他节目(已观看的用户观看过的节目)相比较的观看人数(以百分比形式),视用户观看节目而定谁看过LIMIT x

我希望这是我最好的解释方式,请随意考虑另一种方法来做我想做的事情。所有建议和帮助欢迎。

最佳答案

未经测试,但类似这样:

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

关于php - 电视节目建议算法和SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1782029/

10-12 20:45