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

Удалить неиспользуемые атрибуты и неиспользованные значения.


dima2000

Recommended Posts

Знающие люди, направьте на решение проблемы. После нескольких лет работы магазина и нескольких смен продаваемого ассортимента товаров накопилось огромное количество ненужных атрибутов и значений атрибутов. Ищу решение каким образом можно их удалить пакетно. Может быть каким-то запросом в базе или есть модуль. Самостоятельно решения не нашел. Ручное удаление не вариант, в базе около полутора миллиона значений атрибутов.

 

Версия опенкарта ocStore 1.5.5.1.2

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


А что значит "неиспользуемые" значения? Они в невесомости? Где их товары?

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

Каким образом удалялись товары? Стандартный родной метод должен чистить все связи с товарами.

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

$query = $this->db->query("SELECT DISTINCT pa.product_id FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "product p ON (pa.product_id = p.product_id) WHERE p.product_id IS NULL");

foreach ($query->rows as $result) {
  $this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$result['product_id'] . "'");
}

Отрабатывать может долго.

Все работы на свой страх и риск, скрипт не проверялся.

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

  В 22.03.2019 в 11:37, dima2000 сказав:

Знающие люди, направьте на решение проблемы. После нескольких лет работы магазина и нескольких смен продаваемого ассортимента товаров накопилось огромное количество ненужных атрибутов и значений атрибутов. Ищу решение каким образом можно их удалить пакетно. Может быть каким-то запросом в базе или есть модуль. Самостоятельно решения не нашел. Ручное удаление не вариант, в базе около полутора миллиона значений атрибутов.

 

Версия опенкарта ocStore 1.5.5.1.2

Expand  

 

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

  В 22.03.2019 в 13:47, SooR сказав:
$query = $this->db->query("SELECT DISTINCT pa.product_id FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "product p ON (pa.product_id = p.product_id) WHERE p.product_id IS NULL");

foreach ($query->rows as $result) {
  $this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$result['product_id'] . "'");
}

Отрабатывать может долго.

Все работы на свой страх и риск, скрипт не проверялся.

Expand  

 

ругается на ошибку синтаксиса, я так понял нужно подставить свой префикс базы (oc_) только не понял куда.

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


А какая ошибка?

Этот скрипт нужно выполнить в контексте opencart, в любом контроллере админки.

 

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

  В 22.03.2019 в 17:31, SooR сказав:

А какая ошибка?

Этот скрипт нужно выполнить в контексте opencart, в любом контроллере админки.

 

Expand  

 

я думал нужно делать запросом SQL в PHPMyAdmin.  Там такая ошибка :

  Показати вміст

 

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


Нет, так не сделаете.

Если бы записей было меньше, можно было бы вот так прямо в phpmyadmin

 

DELETE pa FROM oc_product_attribute pa LEFT JOIN oc_product p ON (pa.product_id = p.product_id) WHERE p.product_id IS NULL

А если вы говорите 1,5 млн, попробуйте..

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

  В 22.03.2019 в 17:46, SooR сказав:

Нет, так не сделаете.

Если бы записей было меньше, можно было бы вот так прямо в phpmyadmin

 

DELETE pa FROM oc_product_attribute pa LEFT JOIN oc_product p ON (pa.product_id = p.product_id) WHERE p.product_id IS NULL

А если вы говорите 1,5 млн, попробуйте..

Expand  

Удалено 0 строк. ( запрос занял 3.1404 сек. )

 

Мы же говорим сейчас про значения атрибутов? А не сами атрибуты....

И как еще пустые группы атрибутов таким же способом удалить ?

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


А такое что выдаст?

 

SELECT COUNT(DISTINCT pa.product_id) AS total FROM oc_product_attribute pa LEFT JOIN oc_product p ON (pa.product_id = p.product_id) WHERE p.product_id IS NULL

 

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

  В 22.03.2019 в 18:00, SooR сказав:

А такое что выдаст?

 

SELECT COUNT(DISTINCT pa.product_id) AS total FROM oc_product_attribute pa LEFT JOIN oc_product p ON (pa.product_id = p.product_id) WHERE p.product_id IS NULL

 

Expand  

#1054 - Unknown column 'pa.product_id' in 'field list'

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


Что-то не то у вас, или базу не выбрали..

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

  В 22.03.2019 в 18:11, SooR сказав:

Что-то не то у вас, или базу не выбрали..

Expand  

 

перепроверил, видимо не все скопировал сразу из вашего поста. 

https://yadi.sk/i/gENdLiS2SF2-MQ  запрос отработал :

SQL-запрос был успешно выполнен и все что написал...

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


Ну а результат то какой? Не стесняйтесь скринить все окно

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

  В 22.03.2019 в 18:18, SooR сказав:

Ну а результат то какой? Не стесняйтесь скринить все окно

Expand  

 

так я результат и заскринил

 

https://yadi.sk/i/EvDSwuoi7jjnxA

 

вот пошире окно

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


По результату пишет, что лишних атрибутов нет, точнее, значений атрибутов.

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

  В 22.03.2019 в 18:34, SooR сказав:

По результату пишет, что лишних атрибутов нет, точнее, значений атрибутов.

Expand  

 

 как сделать тоже самое с пустыми категориями атрибутов ?

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


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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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