По каждому товару собираем инфу кто заходил.. пишем либо айди сессии либо айди юзера.
Ну а дальше собираем все посещалки, логика в том, что для каждого товара брать из сессий ближайшие, условно, 10, за определенный период времени, ну и там уже высчитывать как далеко в каждой сессии находятся товары на - и на + (почему +-10, так проще выставлять коэффициенты для позиции товара, 0.1, 0.2, 0.3 и тд) проходимся так по каждой сессии/юзеру - собираем по таких 20 товаров у каждого и суммируем каждому товару вес посещений... в итоге выйдет массив из большого количества элементов и выбираем оттуда первые n отсортировав по весу который вычислили по посещалкам из сессий..
А еще тут учитываются повторные посещения товаров, с этой же таблицы.. тип можно ведь зайти на 7 разных и в разном порядке сделать три дубля🌚