Как массово удалить вариант товара?

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

dimon M
dimon M
Репутация: 1
Сообщения: 86
Зарегистрирован: 16.08.2017
С нами: 6 лет 8 месяцев
Откуда: Харьков

Сообщение #1 dimon » 06.07.2018, 05:10

Версия сайта Окей 1.2.2.
На сайте в каждом товаре два варианта "опт" и "мелкий опт".
Как SQL-запросом массово удалить вариант товара "мелкий опт"?

laskevych M
Аватара
laskevych M
Репутация: 2
Сообщения: 8
Зарегистрирован: 27.12.2017
С нами: 6 лет 3 месяца
Откуда: Днепр

Сообщение #2 laskevych » 06.07.2018, 07:04

Сделайте дамп базы перед использованием скрипта.

Создайте в корне сайте название_скрипта.php
Screenshot_1.png

Запустите скрипт.

dimon M
dimon M
Репутация: 1
Сообщения: 86
Зарегистрирован: 16.08.2017
С нами: 6 лет 8 месяцев
Откуда: Харьков

Сообщение #3 dimon » 06.07.2018, 08:18

SQL-запросом это можно сделать?

laskevych M
Аватара
laskevych M
Репутация: 2
Сообщения: 8
Зарегистрирован: 27.12.2017
С нами: 6 лет 3 месяца
Откуда: Днепр

Сообщение #4 laskevych » 06.07.2018, 08:20

dimon писал(а):SQL-запросом это можно сделать?
Можно. Тогда вы удалите все варианты, но в таблице lang_variants останется мусор.

dimon M
dimon M
Репутация: 1
Сообщения: 86
Зарегистрирован: 16.08.2017
С нами: 6 лет 8 месяцев
Откуда: Харьков

Сообщение #5 dimon » 06.07.2018, 08:28

С картинки боюсь ошибиться в символах.
Напишите пожалуйста в текстовом формате.

laskevych M
Аватара
laskevych M
Репутация: 2
Сообщения: 8
Зарегистрирован: 27.12.2017
С нами: 6 лет 3 месяца
Откуда: Днепр

Сообщение #6 laskevych » 06.07.2018, 08:31

Код: Выделить всё

<?php

require_once('api/Okay.php');
$okay = new Okay();

$okay->db->query("SELECT id FROM `__variants` WHERE `name` = 'мелкий опт'");
$var_ids = $okay->db->results('id');
// Удаляем все варианты с названием 'мелкий опт'
$okay->db->query("DELETE FROM `__variants` WHERE `name` = 'мелкий опт'");
// Удаляем все переводы ранее сохранных ids вариантов
$query = $okay->db->placehold("DELETE FROM `__lang_variants` WHERE `id` in (?@)", (array)$var_ids);
$okay->db->query($query);

dimon M
dimon M
Репутация: 1
Сообщения: 86
Зарегистрирован: 16.08.2017
С нами: 6 лет 8 месяцев
Откуда: Харьков

Сообщение #7 dimon » 06.07.2018, 08:43

Создал в корне сайта файл и запустил его в браузере.
Ничего не произошло.

laskevych M
Аватара
laskevych M
Репутация: 2
Сообщения: 8
Зарегистрирован: 27.12.2017
С нами: 6 лет 3 месяца
Откуда: Днепр

Сообщение #8 laskevych » 06.07.2018, 08:52

dimon писал(а):Создал в корне сайта файл и запустил его в браузере.
Ничего не произошло.
Нужно смотреть ваш сайт. У меня скрипт отработал. Пишите на почту посмотрим, что можно сделать.

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 8 месяцев
Откуда: Киев
Сайт

Сообщение #9 makki » 06.07.2018, 09:16

dimon писал(а):Версия сайта Окей 1.2.2.
На сайте в каждом товаре два варианта "опт" и "мелкий опт".
Как SQL-запросом массово удалить вариант товара "мелкий опт"?

Перед использованием запросов, на всякий случай, сделайте бэкап базы данных.

Код: Выделить всё

DELETE FROM `s_lang_variants` WHERE `name` = 'мелкий опт';
DELETE FROM `s_variants` WHERE `name` = 'мелкий опт';


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

Код: Выделить всё

DELETE FROM `s_lang_variants` WHERE `name` = 'дрібний опт';
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

laskevych M
Аватара
laskevych M
Репутация: 2
Сообщения: 8
Зарегистрирован: 27.12.2017
С нами: 6 лет 3 месяца
Откуда: Днепр

Сообщение #10 laskevych » 06.07.2018, 09:24

makki писал(а):
dimon писал(а):Версия сайта Окей 1.2.2.
На сайте в каждом товаре два варианта "опт" и "мелкий опт".
Как SQL-запросом массово удалить вариант товара "мелкий опт"?

Перед использованием запросов, на всякий случай, сделайте бэкап базы данных.

Код: Выделить всё

DELETE FROM `s_lang_variants` WHERE `name` = 'мелкий опт';
DELETE FROM `s_variants` WHERE `name` = 'мелкий опт';


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

Код: Выделить всё

DELETE FROM `s_lang_variants` WHERE `name` = 'дрібний опт';

А если у него на русском "мелкий опт", на украинском "просто опт", а на английском просто пустое поле ""? Ваш запрос удалит только 'мелкий опт' из переводов. Остальные переводы для этого варианта останутся.

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 8 месяцев
Откуда: Киев
Сайт

Сообщение #11 makki » 06.07.2018, 09:26

laskevych писал(а):А если у него на русском "мелкий опт", на украинском "просто опт", а на английском просто пустое поле ""? Ваш запрос удалит только 'мелкий опт' из переводов. Остальные переводы для этого варианта останутся.
Согласен у моего метода есть недостатки, потому его надо применять с головой.
Ваш метод хорош.
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

korshunov
korshunov
Репутация: 148
Сообщения: 1859
Зарегистрирован: 03.12.2015
С нами: 8 лет 4 месяца
Skype

Сообщение #12 korshunov » 06.07.2018, 10:07

laskevych писал(а):
dimon писал(а):Создал в корне сайта файл и запустил его в браузере.
Ничего не произошло.
Нужно смотреть ваш сайт. У меня скрипт отработал. Пишите на почту посмотрим, что можно сделать.

Скрипт-то отработал, но с каким результатом? Ваш запрос
laskevych писал(а):$query = $okay->db->placehold("DELETE FROM `__lang_variants` WHERE `id` in (?@)", (array)$var_ids);

содержит очевидную ошибку - в таблице нет указанного поля...


А вообще, чем писать отдельный скрипт, я бы сделал попроще:

DELETE FROM s_lang_variants WHERE variant_id IN ( SELECT id FROM s_variants WHERE name = 'мелкий опт' );
DELETE FROM s_variants WHERE name = 'мелкий опт';


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 24 гостя