Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

SQL запрос в БД на привязку товара к главной категории


Recommended Posts

Добрый день!

Есть знающие кто подскажет, какой запрос нужно сделать в БД OcStore 2.3., чтобы конечная категория, в которой лежит товар обозначалась еще, как главная - https://prnt.sc/siuyyw

 

Благодарю!

Змінено користувачем specialforce22
Надіслати
Поділитися на інших сайтах


А что если товар лежит в нескольких категориях. какую считать главной?

По умолчанию если нажать сохранить, вроде-бы движок выставит первую попавшуюся.

Надіслати
Поділитися на інших сайтах


SELECT p.product_id, 
(SELECT cp.category_id FROM oc_product_to_category p2c
JOIN oc_category_path cp ON p2c.category_id = cp.category_id 
WHERE p2c.product_id = p.product_id
GROUP BY cp.category_id
ORDER BY max(cp.level)  DESC LIMIT 1) maxcategory_id
FROM oc_product p

 

23 минуты назад, pimur сказал:

А что если товар лежит в нескольких категориях. какую считать главной?

Как-то так

  • +1 2
Надіслати
Поділитися на інших сайтах

27 минут назад, pimur сказал:

А что если товар лежит в нескольких категориях. какую считать главной?

По умолчанию если нажать сохранить, вроде-бы движок выставит первую попавшуюся.

 

Категорий около 300-х сотен, товаров около 20 тыс.

Товары лежат только в одной категории, которая самая последняя https://prnt.sc/sj7rvx

 

Я даже Batch Editor ом попробовол подойти к вопросу, но понятно, что очень долго муторно и запутанно может получиться :(

Змінено користувачем specialforce22
Надіслати
Поділитися на інших сайтах


3 минуты назад, specialforce22 сказал:

Категорий около 300-х сотен, товаров около 20 тыс.

не это было главное в моем вопросе. А понимание когда они условно лежат на одном уровне допустим в несколих. То какую выбирать.

Но 

4 минуты назад, specialforce22 сказал:

Товары лежат только в одной категории, которая самая последняя

если так на всех товарах. то 

 

7 минут назад, chukcha сказал:

SELECT p.product_id, 
(SELECT cp.category_id FROM oc_product_to_category p2c
JOIN oc_category_path cp ON p2c.category_id = cp.category_id 
WHERE p2c.product_id = p.product_id
GROUP BY cp.category_id
ORDER BY max(cp.level)  DESC LIMIT 1) maxcategory_id
FROM oc_product p

 

Как-то так

 

Надіслати
Поділитися на інших сайтах


7 минут назад, chukcha сказал:

SELECT p.product_id, 
(SELECT cp.category_id FROM oc_product_to_category p2c
JOIN oc_category_path cp ON p2c.category_id = cp.category_id 
WHERE p2c.product_id = p.product_id
GROUP BY cp.category_id
ORDER BY max(cp.level)  DESC LIMIT 1) maxcategory_id
FROM oc_product p

 

Как-то так

 

:eek: Благодарю!!!

Завтра, на свежую голову, зажмурившись дерну, рубильник)))

Надіслати
Поділитися на інших сайтах


UPDATE oc_product_to_path
SET main_category_id = 0;


UPDATE oc_product_to_path p22p
JOIN (SELECT p.product_id, 
(SELECT cp.category_id,  FROM oc_product_to_category p2c
JOIN oc_category_path cp ON p2c.category_id = cp.category_id 
WHERE p2c.product_id = p.product_id
GROUP BY cp.category_id
ORDER BY max(cp.level)  DESC LIMIT 1) leve
FROM oc_product p) m_c
ON p22p.category_id = m_c.product_id AND m_c.product_id = p22p.product_id
SET main_category_id = 1;

 

  • +1 1
Надіслати
Поділитися на інших сайтах

3 минуты назад, pimur сказал:

если так на всех товарах. то 

 

Да, вроде, всё верно - только в одной, но спасибо за предостережение, поисследую всё внимательно, чтобы не произошло такого случая :)

 

Надіслати
Поділитися на інших сайтах


3 минуты назад, specialforce22 сказал:

Завтра, на свежую голову, зажмурившись дерну, рубильник)))

бекап не забудьте

  • +1 1
Надіслати
Поділитися на інших сайтах

11 часов назад, chukcha сказал:

UPDATE oc_product_to_path

SET main_category_id = 0;

 

При попытке такого запроса выдает, что таблица в базе не существует.

 

А если так

UPDATE oc_product_to_path p22p
JOIN (SELECT p.product_id, 
(SELECT cp.category_id,  FROM oc_product_to_category p2c
JOIN oc_category_path cp ON p2c.category_id = cp.category_id 
WHERE p2c.product_id = p.product_id
GROUP BY cp.category_id
ORDER BY max(cp.level)  DESC LIMIT 1) leve
FROM oc_product p) m_c
ON p22p.category_id = m_c.product_id AND m_c.product_id = p22p.product_id
SET main_category_id = 1;

 

то говорит

#1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около 'FROM oc_product_to_category p2c
JOIN oc_category_path cp ON p2c.category_id = c' на строке 3

 

Такой запрос не делает привязку к главной, я так понял, что он как бы актуализирует категорию нахождения этого товара https://prnt.sc/sjhr72

SELECT p.product_id, 
(SELECT cp.category_id FROM oc_product_to_category p2c
JOIN oc_category_path cp ON p2c.category_id = cp.category_id 
WHERE p2c.product_id = p.product_id
GROUP BY cp.category_id
ORDER BY max(cp.level)  DESC LIMIT 1) maxcategory_id
FROM oc_product p

12 часов назад, pimur сказал:

По умолчанию если нажать сохранить, вроде-бы движок выставит первую попавшуюся.

 

Считал себя опытным контентером, занесшим 10-ки тыщ товаров вручную, знал, что, если указать главную, то она отобразиться галочкой также и в "показывать в категориях", а оказывается и в обратную сторону работает...Действительно, если указано в какой категории показывать (наверно, если она одна :)), то при пересохранении товара она же прописывается главной...Не знал. Спасибо pimur за науку.

 

Если пересохранение товара, в моем случае, привязывает к главной, как нужно, то, может, есть инструменты, как пересохранить все товары))?

 

Спасибо!

Надіслати
Поділитися на інших сайтах


Я не всегда правильно даю код

 

Вы же хотите сделать сами?

oc_product_to_category

Но это еще не все.

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.