SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.07.2011 19:01:17

true
Участник
Зарегистрирован: 09.07.2011
Сообщений: 1

Нахождение схожих объектов по свойствам на основе двух таблиц

Доброго времени суток,
впервые столкнулся с такой задачей и не совсем понимаю как (хотя бы в общих чертах) ее решить.
Задача заключается в следующем:

Имеем рекомендательную систему по телеканалам, у каждого телеканала есть список проигранных фильмов, у каждого фильма есть определенные теги. В итоге, у каждого телеканала есть список уникальных тегов + их вес (сколько один и тот же тег повторяется на канале).

Когда пользователь смотрит определенные каналы - мы запоминаем их, и на основе этого списка можем получить общие предпочтения пользователя в виде "тег - вес тега".

необходимо на списке предпочтений пользователей "тег + вес тега" получить список наиболее подходящих для него телеканалов.

Получается 2 таблицы:

tv_tags:
tv_id (INT)
tag_id (INT)
tag_weight(INT)

user_preferred_tags:
user_id (INT)
tag_id (INT)
tag_weight (INT)

Как можно на основе таблицы user_preferred_tags получить некоторое количество tv_id из таблицы tv_tags, отсортированных по релевантности (чем больше совпадение по тегам и их весам - тем выше в позициях).

Одним запросом тут не обойдешься..
Буду рад любой помощи, сижу над задачей уже несколько часов smile

P.S. Реальный пример:
на канале "Мурзики" проиграло 2 фильма:
теги фильма 1: драма, приключения
теги фильма 2: приключения, комедия, боевик.

на основе этого в таблице  tv_tags имеем следующие значения:
драма (1)
приключения (2)
комедия (1)
боевик (1)

содержимое user_preferred_tags, если человек посмотрел канал 2 раза:
драма (1) + драма (1) /2
приключения (2) + приключения (2)/2
комедия (1) + комедия (1)/2
боевик (1) + боевик (1)/2
(в данном случае вес каждого тега делится на кол-во просмотров различных телеканалов)

Отредактированно true (09.07.2011 19:05:17)

Неактивен

 

#2 10.07.2011 23:10:41

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Re: Нахождение схожих объектов по свойствам на основе двух таблиц

Если я вас правильно понял

SELECT upf.user_id, SUM(tt.tag_weight)/COUNT(tt.tag_id) as level FROM tv_tags as tt, user_preferred_tags as upf WHERE tt.tag_id =upf.tag_id GROUP BY upf.user_id, tt.tag_id ORDER BY level DESC

Отредактированно DJK (10.07.2011 23:11:48)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson