有些用户可以通过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
的用户观看了节目我希望这是我解释它的最佳方式,并且可以自由地想出另一种方法去做我想做的事情。欢迎提出所有建议和帮助。
答案 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