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

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


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'] . "'");
}

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

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

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

3 часа назад, dima2000 сказал:

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

 

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

 

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

3 часа назад, 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'] . "'");
}

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

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

 

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

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


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

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

 

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

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

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

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

 

 

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

Спойлер

Ошибка

Вероятно, SQL-запрос содержит ошибку. При наличии таковой, ниже будет выведена ошибка MySQL-сервера, облегчающая диагностику проблемы.


ERROR: Неизвестная пунктуация @ 15
STR: ->
SQL: $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");$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");$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");$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");

 

SQL-запрос: Документация

$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");

Ответ MySQL: Документация

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$query = $this->db->query("SELECT DISTINCT pa.product_id FROM " . DB_PREFIX . "p' at line 1 

 

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


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

Если бы записей было меньше, можно было бы вот так прямо в 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 млн, попробуйте..

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

11 минут назад, 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 млн, попробуйте..

Удалено 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

 

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

6 минут назад, 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

 

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

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


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

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

5 минут назад, SooR сказал:

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

 

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

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

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

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


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

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

12 минут назад, SooR сказал:

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

 

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

 

https://yadi.sk/i/EvDSwuoi7jjnxA

 

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

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


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

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

46 минут назад, SooR сказал:

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

 

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

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


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

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

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

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

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

Вхід

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

Вхід зараз

×
×
  • Створити...

Important Information

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