Правильная организация БД для работы со статистическими данными
Вам надо несколько таблиц:

Таблица пользователей
 — id
 — имя

Таблица фруктов
 — id
 — название фрукта

Таблица предпочтений пользователей
 — id пользователя
 — id фрукта
 — сколько раз съедено
 — оценка

Тут конечно вопрос возникает, как считается оценка по пятибальной шкале, и когда оценивается фрукт, один раз или каждый раз, после съедания?

По сутки такой структуры достаточно будет, чтобы по всякому оперировать данными
Рекомендованные для Васи фрукты ищутся следующим образом: мы берем любимые фрукты Васи и ищем тех людей, которые тоже их любят. Затем у этих людей ищем те фрукты, которые любят они и которые Вася не ел, сортируем их по количеству совпадений и выдаем Топ-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
}


Вроде как этот способ лучше предсказывает следующую покупку.