Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Список объектов по свойствам из 2х таблиц (Александр) 09/07/2011 - 20:24:53
      Re: Не очень понятна проблема (Akina) 09/07/2011 - 23:45:08
      Re: Не очень понятна проблема (Александр) 10/07/2011 - 00:11:12
      Re: Не очень понятна проблема (Akina) 10/07/2011 - 13:32:06
      Re: Не очень понятна проблема (Александр) 15/07/2011 - 15:45:36

> Original message text:
> From: Александр - 09/07/2011 - 20:24:53
> Subject:Список объектов по свойствам из 2х таблиц
> -----------------
> Доброго времени суток,
> не уверен, можно ли решить данную задачу одним запросом, более того, сейчас вообще не вижу для нее рациональных решений.
> Пожалуйста, укажите путь :)
>
> Существует несколько тв-каналов, на которых показываются фильмы. У Фильмов есть теги. Для каждого канала ведется история проигранных фильмов, на основе которой можно получить статистику в виде тег - вес тега. (в данном случае вес будет отображать кол-во раз, которое тег встречается во всех фильмах на этом канале), например на канале были показаны следующие фильмы:
>
> фильм 1: драма, музыка, приключения
> фильм 2: комедия, боевик, приключения
>
> соответственно для канала мы получим следующий набор тегов и их весов:
> приключения (2)
> драма (1)
> музыка (1)
> комедия (2)
> боевик (2)
>
> Кроме этого, мы запоминаем историю просмотров пользователя в виде user_id - channel_id.
> Имея для каждого канала набор тегов и их весов, несложно посчитать наиболее предпочитаемые теги пользователем и их веса.
> Сделать это можно по формуле: вес тега = кол-во раз, которое тег встречается в истории просмотров пользователя/кол-во записей в истории просмотра.
>
> т.е. в итоге получается две таблицы: channel_tags, user_preferred_tags
> структура:
>
> channel_tags {
> channel_id: INT,
> tag_id: INT,
> weight: INT
> }
>
> user_preferred_tags {
> user_id: INT,
> tag_id: INT,
> weight: INT
> }
>
> Как на основе этой таблицы можно получить определенное кол-во каналов (channel_id), которые больше всего подходят по релевантности (набольшее кол-во совпадений тегов и их весов), в порядке убывания по этой же релевантности.
>
> Буду безумно рад любой помощи. Догадываюсь что одним запросом дело скорее всего не обойдется.
> Честно гуглил. Но гуглилось плохо, потому что не знаю как у гугла это спросить :(
>


From: Akina - 10/07/2011 - 13:32:06
Subject:Не очень понятна проблема
-----------------
Хм... ладно. Допустим, задача выглядит так:

Имеется: две таблицы, channel_tags и user_preferred_tags. Структура приведена выше.
Необходимо: для конкретного юзера (т.е. для конкретной записи из user_preferred_tags) найти N записей из таблицы channel_tags, которые "наиболее близки" к ней.

Соответственно вопрос номер 1 - каков критерий этой "близости"?

Навскидку я вижу два варианта:
1) Минимальная сумма абсолютных значений отклонений весов тегов;
2) Минимальная сумма квадратов значений отклонений весов тегов.

Иными словами, выберите дин из этих вариантов либо сформулируйте свой вариант. Тогда можно будет двигаться дальше. Одновременно решите, что делать в случае, если некий тег присутствует в одной таблице, но отсутствует в другой - игнорировать? считать нулевым? иное? Причём опишите отдельно поведение и в том, и в другом случае.

Но вообще с моей точки зрения, это не задача для MySQL. Он должен как раз выбрать сведения о пользователе и сведения о каналах. Возможно, заменив null-евые значения нулевыми. А расчёт невязок, сортировку и отбор разумнее делать на клиенте (в данном случае PHP).


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
39084



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |