Я пытаюсь создать базовую систему рекомендаций по совместной фильтрации с использованием MySQL. У меня есть таблица рейтинга пользователей, как это:
user_id movie_id rating
1 131 342 3 <<< User 131 has rated movie 342
2 131 312 5 <<< and also 312
3 122 312 4
4 213 342 5
5 141 342 5 <<< User 141 has rated 342
6 141 312 4 <<< and also 312 (2 movies in common)
7 141 323 3
Итак, я пытаюсь найти пользователей, похожих на 131. Я хочу вернуть пользователей, у которых есть как минимум два общих фильма и рейтинг выше 3. Поэтому он должен возвращать строки 5 и 6 (как показано выше).
Это то, что у меня есть до сих пор:
SELECT * from user_ratings
WHERE rating >= 3
AND movie_id IN (SELECT movie_id from user_rating WHERE user_id = 131)
AND user_id != 131
Это возвращает:
user_id movie_id rating
3 122 312 4 <<< Don't want these two
4 213 342 5 <<<
5 141 342 5
6 141 312 4
Он возвращает фильмы, общие для пользователей с 131, но мне нужно, чтобы он показывал только тех пользователей, у которых есть как минимум два общих элемента. Как я мог это сделать? Я не уверен, как действовать :(