Алгоритм предложения телешоу и SQL

0

Есть пользователи, на которые может ссылаться идентификатор, как показано в таблице ниже:

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

Я надеюсь, что имеет смысл, что это мой лучший способ объяснить это, не стесняйтесь думать о другом способе делать то, что я пытаюсь сделать. Все предложения и помощь приветствуются.

Теги:

2 ответа

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.name, Count (1) ОТ tvshows ГДЕ user_id IN (ВЫБЕРИТЕ user_id ОТ tvshow_hits ГДЕ show_id = @show_id) GROUP BY tvshows.name LIMIT 0, 30 MySQL говорит: # 1054 - неизвестный столбец «user_id» в ' IN / ALL / ANY subquery 'Однако tvshow_hits и пользователи имеют столбец user_id.
  • 0
    Я думаю, это потому, что вы выбираете из таблицы tvshows, а не из представления showhitdetails. (Я обновил свой ответ, чтобы показать это)
Показать ещё 7 комментариев
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?
  • 0
    @steven: Other_users и other_shows являются псевдонимами, они оба предназначены для использования таблицы userid, showid столбцы userid, showid
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню