Как автоматически исключить элементы, уже посещенные в алгоритме рекомендации? - PullRequest
1 голос
/ 18 января 2010

Я сейчас использую наклон Один для рекомендации.

Как исключить посещенные элементы из результата?

Я не могу сделать это просто not in (visited_id_list), чтобы отфильтровать посещенных, потому что это будет иметь проблему с масштабируемостью для старого пользователя!

Я придумал решение без not in:

.
select b.property,count(b.id) total from propertyviews a
                                         left join propertyviews b on b.cookie=a.cookie
                                         left join propertyviews c on c.cookie=0 and b.property=c.property
                                         where a.property=1 and a.cookie!=0 and c.property is null
                                         group by b.property order by total;

1 Ответ

1 голос
/ 18 января 2010

Серьезно, если вы используете MySQL, посмотрите на 12.2.10.3. Подзапросы с ЛЮБОЙ, ВНУТРИ и НЕКОТОРЫМИ

Например:

SELECT s1 FROM t1 WHERE s1 IN    (SELECT s1 FROM t2);

Это доступно во всех версиях MySQL, на которые я смотрел, хотя номера разделов в руководстве отличаются в более старых версиях.

РЕДАКТИРОВАТЬ в ответ на комментарий ОП:

  1. ОК ... как насчет чего-то вроде SELECT id FROM t1 WHERE ... AND NOT id IN (SELECT seen_id FROM user_seen_ids where user = ? ). Эта форма избавляет от необходимости передавать тысячи идентификаторов в операторе SQL.

  2. Если вы хотите полностью избежать части запроса «проверка по списку идентификаторов», я не понимаю, как это вообще возможно в теории, не говоря уже о том, как вы бы это реализовали.

...