Рекомендованные для Васи фрукты ищутся следующим образом: мы берем любимые фрукты Васи и ищем тех людей, которые тоже их любят. Затем у этих людей ищем те фрукты, которые любят они и которые Вася не ел, сортируем их по количеству совпадений и выдаем Топ-10.
Совет: Переформулируйте условие. На большом кол-ве товаров в шопах, при вышеприведеном условии частые пустые ответы, а еще чаще получаются хлохмы типа «купившие процессор покупают чернила».
— Рекомендованные фрукты ищутся как наиболее часто-поедаемые фрукты совместно с фруктами, которые ел Вася.
Structure---
kuplenno:
userID,
fruitID
recomendacii
fruitID
fruitID2
cnt
Псевдокод для понимания
function buy( userId, fruitId ) {
for fruit in SELECT * FROM kuplenno {
INSERT INTO recomendacii VALUES ( fruitId, fruit, 1 ) ON DUBLICATE KEY
UPDATE recomendacii where fruitID = fruitID AND fruitID2 = fruit
}
INSERT INTO kuplenno VALUES ( userId, fruitId )
}
function getBestFruits( userId ) {
return
SELECT fruitID2, sum( cnt ) as ocenka FROM kuplenno, recomendacii
WHERE userID = userId AND kuplenno.fruitID = recomendacii.fruitID AND frutID not in (SELECT fruitID FROM kuplenno where userID = userId )
GRUP BY fruitID2
ORDER BY ocenka
LIMIT 10
}
Вроде как этот способ лучше предсказывает следующую покупку.