|
Выбрать товары которые заказывают вместе
|
|||
---|---|---|---|
#18+
Здравствуйте. Есть таблица заказов orders , с полями : order_id | product_id 1 | 26 1 | 27 2 | 26 Как sql запросом получить группы product_id товаров , которые заказывались совместно как минимум в 2 заказах ? Я пробовал так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Но так происходит сопоставление только идентичных заказов, т.е. заказов у которых количество позиций одинаковое и сами товарные позиции одинаковые. Как добавить в выборку остальные заказы? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2020, 22:40 |
|
Выбрать товары которые заказывают вместе
|
|||
---|---|---|---|
#18+
cu2netzov4n Как sql запросом получить группы product_id товаров , которые заказывались совместно как минимум в 2 заказах ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 07:32 |
|
Выбрать товары которые заказывают вместе
|
|||
---|---|---|---|
#18+
В идеале группы товаров, т.е. с продуктом 1 заказывают продукт 10, продукт 7 и т.д. Либо как минимум группы состоящие из 2 продуктов, т.е. продукт 2 заказывают с продуктом 7 это одна группа, продукт 2 - продукт 7 другая группа , продукт 8 - продукт 17 ещё одна группа и т.д.(потом уже дополнительным запросом можно сгруппировать к идеальному варианту выше) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 08:36 |
|
Выбрать товары которые заказывают вместе
|
|||
---|---|---|---|
#18+
cu2netzov4n, Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 09:56 |
|
Выбрать товары которые заказывают вместе
|
|||
---|---|---|---|
#18+
cu2netzov4n, Если это не учебное задание, то надо учитывать, что отношения между товарами несимметричные. Если с товаром А часто покупают товар Б, это не значит, что с товаром Б часто покупают товар А. Соответственно, имеет смысл выявлять не пары товаров, а для каждого товара находить другие, которые с ним покупают с высокой вероятностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 10:39 |
|
Выбрать товары которые заказывают вместе
|
|||
---|---|---|---|
#18+
cu2netzov4n В идеале Нет, алгоритм мы можем пообсуждать - безотносительно к диалекту и вообще к программированию (правда, и раздел нужен другой), но тут-то Вы просите конкретное решение, которое в первую очередь зависит от того, что прячется у Вас в голове... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 11:59 |
|
Выбрать товары которые заказывают вместе
|
|||
---|---|---|---|
#18+
Я бы думал в сторону Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Возможно, дополнительно с ограничением количества товаров-компаньонов. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 12:07 |
|
Выбрать товары которые заказывают вместе
|
|||
---|---|---|---|
#18+
Akina, извиняюсь что не понятно описал проблему. В общем есть много старых заказов: заказ №1 с товарами : 8, 7 ,25 заказ №2 с товарами : 8, 10 ,34 №3 - 25, 45, 92 №4 - 30, 32, 53 №5 - 5, 72, 53 И нужно собрать в группы товары , которые совместно с другими товарами встречаются в разных заказах. Т.е. мы объединяем заказы № 1 , № 2, №3 между собой в одну группу , т.к. товар 8 есть в заказах № 1 и №2, а также товар 25 есть в заказах № 1 и заказе №3. И мы объединяем заказы №4 и №5 так как товар 53 есть в обоих заказах. Структура таблицы та же order_id | product_id 1 | 26 1 | 27 2 | 26 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 12:37 |
|
Выбрать товары которые заказывают вместе
|
|||
---|---|---|---|
#18+
Akina, спасибо. Но запрос получается долгий. авторSELECT GROUP_CONCAT(`ttt`.`group_product`) FROM ( SELECT `product_id`, GROUP_CONCAT(`product_id`) as `group_product` FROM `order_items` WHERE `product_id` IN ( SELECT `product_id` FROM `order_items` GROUP BY `product_id` ) GROUP BY `order_id` ) as `ttt` GROUP BY `ttt`.`product_id` Результат примерно тот которые нужен, но при объединение товаров в группы получаются группы с дублями product_id. Неудобно что GROUP_CONCAT создает список product_id через запятую в одной строке. Конечно можно конкатенировать квадратные скобки с краев списка и получится валидный json, но не удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 12:55 |
|
Выбрать товары которые заказывают вместе
|
|||
---|---|---|---|
#18+
cu2netzov4n авторSELECT DISTINCT GROUP_CONCAT(`ttt`.`group_product`) FROM ( SELECT `product_id`, GROUP_CONCAT(`product_id`) as `group_product` FROM `order_items` WHERE `product_id` IN ( SELECT `product_id` FROM `order_items` GROUP BY `product_id` ) GROUP BY `order_id` ) as `ttt` GROUP BY `ttt`.`product_id` Это запрос обрабатывает за несколько секунд. Внутренний GROUP_CONCAT(`product_id`) as `group_product` собирает товары каждого заказа в отдельную ячейку. А внешний GROUP_CONCAT(`ttt`.`group_product`) собирает получившиеся группы в большие группы , по пересечения product_id ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 16:26 |
|
|
start [/forum/topic.php?fid=47&msg=39932498&tid=1828727]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 314ms |
total: | 476ms |
0 / 0 |