TV Show Öneri Algoritma ve SQL

2 Cevap php

Aşağıdaki tabloda görüldüğü gibi bir kimliği tarafından başvurulan kullanıcı var:

users:
user_id

Ben göstermek görüşlerini izleyebilmek için bir çözüme çalıştılar

tvshow_hits:
user_id|show_id

Içinde detayları ile bir tablo da var:

tvshows:
show_id|name

Ama bu değiştirmek için açığım gerekli değildir. Ben onlar aksine müzik tv şovları ve filmler sadece bir kez izledim çünkü, onu izledim ve tekrar izledim eğer herhangi bir "ağırlık" taşımak yoksa daha bireysel görüşlerin takip etmek gerekli değildir hissediyorum.

So now I'll work backwards: The resulting page should look like this:

People Who Watch Also Watch

South Park 40%
Family Guy 20%
Something 10%

Peki, ne gerek bir sorgu ve (gerekirse) PHP kodu

(P DESC sırayla) Select gösterileri, AS yüzdesi şeklinde (izledim kullanıcılar izledim edilmiştir) diğer gösteriler göre izleyebilirsiniz insanların miktarı P WHERE show (ler) izledim kullanıcılar izledim edilmiştir LIMIT x

Ben, o bunu açıklayan en iyi yoludur mantıklı umut yapmak ne çalışıyorum yapmak için başka bir yol düşünmek için çekinmeyin. Tüm öneri ve yardım bekliyoruz.

2 Cevap

Böyle bir şey ancak test değil:

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

Size bir gösterinin adını (tvshowhitdetails burada show_hits ve ayrıntıları göster tabloyu birleştiren bir görünümdür) ve onu izledi insanların sayısını verecektir. Daha sonra yüzdesini çalışmak için başka bir sorgu kullanıcıların toplam sayısını alabilirsiniz.

Update
Your tvshowhitdetails view looks like this:

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

Gösterinin başlayarak, bu gösteriyi izledi diğer kullanıcıları bakabilirsiniz. Sonra bu diğer kullanıcıların izledi gösterileri bakabilirsiniz. Diğer gösterisi ile grup onu, ve seçilen program için gözlemcileri toplam sayısına bölerek yüzdesi hesaplanır.

İşte bir örnek sorgu var:

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