Страница 1 из 1
Автоувеличение на единицу в поле "Артикул"
Добавлено: 04.04.2018, 06:59
Ivan2018
На сайте свыше 2 тыс товаров. Артикул начинается так, первый товар Артикул= 1, Артикул= 2, Артикул= 3 ... чисто цифрой, то есть все по порядку.
Необходимо сделать в админке, чтобы в базе находился максимум в этом поле и прибавлялась 1, при создании нового товара.
Т.к. человеческий фактор существует, могут быть допущены ошибки при написании значения в поле Артикул.
Добавлено: 04.04.2018, 08:08
makki
Чтобы прописать Артикул для существующих товаров, сделайте такой запрос в базу данных
Для того, чтобы при последующем добавлении новых товаров автоматически добавлялся Артикул, в файле api/Variants.php в функции add_variant после строки
добавьте
Код: Выделить всё
if(empty($variant->sku)) {
$this->db->query("UPDATE __variants SET sku=id WHERE id=?", $variant_id);
}
Чтобы артикул выглядел так: 100001, 100002 и т.д., поменяйте в запросах sku=id на
Код: Выделить всё
sku=concat('1',substring(concat ('00000',id),-5))
Добавлено: 04.04.2018, 08:22
korshunov
А почему не попроще
UPDATE `ok_variants` SET `sku` = id;
Или уж, если не хочется маленьких чисел, то
UPDATE `ok_variants` SET `sku` = 1000000+id;
А если непременно при создании надо, то
в api/Variants.php после
public function add_variant($variant) {
$variant = (object)$variant;
$result = $this->languages->get_description($variant, 'variant');
$query = $this->db->placehold("INSERT INTO __variants SET ?%", $variant);
$this->db->query($query);
$variant_id = $this->db->insert_id();
добавить
$query = $this->db->placehold("UPDATE __variants SET sku=1000000+id WHERE id=? LIMIT 1", $variant_id);
$this->db->query($query);
Добавлено: 04.04.2018, 08:36
makki
korshunov писал(а):А почему не попроще
UPDATE `ok_variants` SET `sku` = id;
Или уж, если не хочется маленьких чисел, то
UPDATE `ok_variants` SET `sku` = 1000000+id;
Мне больше нравится когда разрядность у всех артикулов одинаковая :)
Добавлено: 04.04.2018, 09:08
Ivan2018
korshunov писал(а):добавить
$query = $this->db->placehold("UPDATE __variants SET sku=1000000+id WHERE id=? LIMIT 1", $variant_id);
$this->db->query($query);
Не добавляется артикул, что еще можно сделать? Может кеш удалить из папок
/compiled/
/backend/design/compiled/
Добавлено: 04.04.2018, 11:50
korshunov
Ivan2018 писал(а):korshunov писал(а):добавить
Не добавляется артикул, что еще можно сделать?
Про то, что "еще можно сделать", можно книгу толстенную написать на сотни страниц.
Если дадите FTP, могу посмотреть...
Добавлено: 05.04.2018, 05:35
Ivan2018
При таком раскладе
Код: Выделить всё
$query = $this->db->placehold("UPDATE __variants SET sku=id WHERE id=? LIMIT 1", $variant_id);
$this->db->query($query);
не находит максимальное значение, а пишет число 11031, у меня максимальный артикул 2750,
то есть при сохранении нового товара должно вставляться в ячейку артикула значение: 2751.
В примерах есть такое:
"Как определить наибольшее значение в столбце?"
SELECT MAX(article) AS article FROM shop
Тогда может быть WHERE id=? заменить на WHERE id=MAX(id)
Добавлено: 05.04.2018, 06:27
korshunov
Пробуйте заменить. Думаю, с гарантией получите ошибку SQL.
Если хотите работать по Вашему примеру, то, чтобы было полностью правильно, надо делать несколько сложнее, так как в поле артикула sku значения, вообще говоря, не числовые, и это надо учитывать.
Если не хотите использовать простые способы типа sku=substring(concat ('000000',id),-5), sku=1000000+id, sku=concat('A',d), дело Ваше. Если непременно хочется сделать из простого вопроса сложный, пробуйте идти своим путем...
Добавлено: 05.04.2018, 08:16
Ivan2018
Чем проще тем лучше, не принципиально значение артикула, важно что автоматом ставится и последовательно, оставил так
Код: Выделить всё
$query = $this->db->placehold("UPDATE __variants SET sku=id WHERE id=? LIMIT 1", $variant_id);
$this->db->query($query);
Добавлено: 09.04.2018, 13:18
Julius123
У меня почему-то запрос "UPDATE `ok_variants` SET `sku` = 1000000+id;" не меняет текущие значения Артикула, все остаётся как и было
Добавлено: 09.04.2018, 13:19
Ivan2018
Julius123 писал(а):У меня почему-то запрос "UPDATE `ok_variants` SET `sku` = 1000000+id;" не меняет текущие значения Артикула, все остаётся как и было
Сохраните товар и артикул появится
Добавлено: 09.04.2018, 13:21
Julius123
Ivan2018 писал(а):Julius123 писал(а):У меня почему-то запрос "UPDATE `ok_variants` SET `sku` = 1000000+id;" не меняет текущие значения Артикула, все остаётся как и было
Сохраните товар и артикул появится
Мне что все несколько тысяч пересохранить? )
но вопрос в другом, я не очень хочу такое длинное значение и ставлю в запрос 100+id "UPDATE `ok_variants` SET `sku` = 100+id;" но не работает, пишет что запрос затронул 0 строк, но если выполнять "UPDATE `ok_variants` SET `sku` = 1000000+id;" тогда работает
Добавлено спустя 5 минут 18 секунд:Кажется уже разобрался, не совсем понял как работает запрос, думал что будет видать число 100 отдельно и плюс число id товара, а тут просто математическое добавление одного числа к другому
Добавлено: 09.04.2018, 13:31
korshunov
Все правильно, так и быть должно.
"затронул 0 строк" - это и значит, что сработал.
А если чуть-чуть задумаетесь, то легко понять, почему затронуто 0 строк.
Подсказка: выполните запрос типа "UPDATE `ok_variants` SET `sku` = 200+id;" 2 раза и каждый раз обращайте внимание на отчет о выполнении...
Добавлено: 09.04.2018, 13:41
Julius123
korshunov писал(а):А если непременно при создании надо, то
в api/Variants.php после
public function add_variant($variant) {
$variant = (object)$variant;
$result = $this->languages->get_description($variant, 'variant');
$query = $this->db->placehold("INSERT INTO __variants SET ?%", $variant);
$this->db->query($query);
$variant_id = $this->db->insert_id();
добавить
$query = $this->db->placehold("UPDATE __variants SET sku=1000000+id WHERE id=? LIMIT 1", $variant_id);
$this->db->query($query);
Еще такой вопрос, вот если например добавление идет не через админку а через импорт, это тоже будет работать?
Добавлено: 09.04.2018, 14:45
korshunov
Должно работать.
А быстрее было бы Вам самому провести эксперимент за пару минут и узнать точно...
Добавлено: 21.12.2022, 19:31
the99dots
Julius123 писал(а):А если непременно при создании надо, то
в api/Variants.php после
Объясните пжлст более подробно, куда именно этот кусок кода вставлять... не нашел в структуре сайта файл Variants.php
или это возможно только через пхп-май-админ?