Задавайте вопросы, мы ответим
Вы не зашли.
Помогите решить проблему
есть таблица в которой ведется список всех покупок всех пользователей, нужно предложить пользователю продукт который купил другой пользователь, но при этом учитывать схожесть списков
user_id | prod_id
1 | 222
1 | 333
1 | 444
2 | 222
2 | 111
3 | 555
3 | 111
3 | 222
нужно сделать такой запрос чтобы при поиске user_id=2 и file_id=222 он выдал
user_id | prod_id
3 | 555
1 | 333
1 | 444
т.к. у user_id 2 есть prod_id=222 и prod_id=111 что на 2/3 совпадает со списком user_id=3 и только на 1/3 со списком user_id=1
Неактивен
Если я правильно понял задачу, то мне видится в такой задаче два этапа:
1. Получение весовых соотношений совпадения для каждого пользователя
2. Выборка продуктов в соответсвующих весовых соотношениях от каждого пользователя
Загвоздка в том, что п.2 реализуется через запрос определенного количества строк (скорее всего, через LIMIT это будет), что есть всегда величина целая. Поэтому весовые соотношения, полученные из п.1, нужно будет округлять до целого.
Одним запросом такое не сделать, поэтому я думаю, что нужно будет писать хранимую процедуру (если у Вас MySQL не ниже 5)
у user_id 2 есть prod_id=222 и prod_id=111 что на 2/3 совпадает со списком user_id=3 и только на 1/3 со списком user_id=1
А почему тогда от 1 в два раза больше записей, чем от 3, хотя соотношение совпадения списков обратное?
Неактивен
соотношение совпадения списков определяет порядок, и по большому щету мне нужны только user_id и только по одному разу, но в порядке убывания совпадения списков
user_id
3
1
и mysql у меня 4.1.22
Неактивен
по большому щету мне нужны только user_id и только по одному разу, но в порядке убывания совпадения списков
Такой список получить просто - нужно выбрать всех пользователей, у которых есть товары, присутствующие у пользователя с user_id=2 (кроме самого этого пользователя, иначе будет дублирование) и упорядочить их по количеству совпавших товаров:
Неактивен
большое спасибо ))
Неактивен
С учетом потенциальной проблемы с подзапросом
http://sqlinfo.ru/forum/viewtopic.php?id=559
Возможно лучше будет
SELECT t.user_id FROM tbl t
WHERE EXISTS(
SELECT tbl.prod_id
FROM tbl
WHERE tbl.user_id = 2
AND t.prod_id = tbl.prod_id)
AND user_id != 2
GROUP BY t.user_id
ORDER BY COUNT(*) DESC;
Ну и соответственно переделать второй шаг.
Неактивен