Есть пользователи, на которые может ссылаться идентификатор, как показано в таблице ниже:
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 ГДЕ шоу просматривались пользователями, которые смотрели 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
Начиная с шоу, вы можете искать других пользователей, которые смотрели это шоу. Затем вы можете посмотреть шоу, которые наблюдали эти другие пользователи. Группируйте его с помощью другого шоу и вычислите процент, разделив общее количество наблюдателей для выбранного шоу.
Вот пример запроса:
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
userid, showid
столбцы userid, showid