2009-11-23 91 views
0

有跡象表明,可以通過一個ID如下表所示引用用戶:電視節目推薦算法和SQL

users: 
user_id 

我試圖在一個解決方案用於跟蹤的節目意見

tvshow_hits: 
user_id|show_id 

還有與細節的表吧:

tvshows: 
show_id|name 

但是,這並不需要我開放的變化。我覺得如果他們看過它,就沒有必要更多地跟蹤個別觀點,因爲不像音樂電視節目和電影只能觀看一次,如果他們再次觀看,他們不會有任何「重量」。

所以現在我會向後工作: 結果頁面應該是這樣的:

人也表手錶

South Park 40% 
Family Guy 20% 
Something 10% 

所以,我需要的是一個查詢(如需要)PHP代碼

選擇的節目(在P DESC),的量的順序人們看着它相比於其他節目(已被觀看了誰看過用戶)以百分比形式P誰WHERE顯示(一個或多個)已經被觀看了誰看過用戶極限X1

我希望這是有道理的,這是我解釋它的最好方式,隨時想想另一種方法來做我想做的事情。所有建議和幫助歡迎。

回答

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 
+0

SQL查詢: SELECT tvshows。名稱,計數(1) FROM tvshows WHERE USER_ID IN( SELECT user_id說明 FROM tvshow_hits WHERE show_id = @show_id ) GROUP BY tvshows.name LIMIT 0,30 MySQL表示: #1054 - 在未知列'USER_ID 'IN/ALL/ANY子查詢' 然而tvshow_hits和用戶都有一個山坳的user_id。 – steven 2009-11-23 10:03:50

+0

我想這是因爲你從tvshows表中選擇而不是showhitdetails視圖。 (我更新了我的答案以顯示此內容) – jammus 2009-11-23 10:08:37

+0

感謝您的回覆:我編輯了我的問題以反映我的實際表名,並且修復了一些列。這是我剛使用的查詢:SELECT tvshows.name,計數(1)AS no_users FROM tvshows WHERE USER_ID IN(SELECT USER_ID FROM tvshow_hits WHERE show_id = @show_id)AND show_id <> @show_id GROUP BY tvshows.name ORDER BY no_users DESC但它仍然給我和以前一樣的錯誤。 – steven 2009-11-23 10:22:08

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 
+0

應該Other_users和Other_shows是:用戶和tvshows_hits? – steven 2009-11-23 10:21:31

+0

@steven:Other_users和other_shows的別名,它們都意在使用具有'用戶ID表,showid'列 – Andomar 2009-11-23 10:27:34

+0

我不明白我的意思改變other_shows和other_users什麼? – steven 2009-11-23 10:33:30