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

Изменение атрибутов товара через бд


erikm

Recommended Posts

Добрый день! Помимо интернет-магазина имеется и обычный, приходится обновлять количество товаров на сайте вручную. Синхронизировать кассу с бд пока не вижу смысла, но хотелось бы иметь возможность в пару кликов обновлять, это самое, количество товаров на сайте.

 

Предположим у меня есть массив "Артикулов" связанный с необходимым "Количеством товара". С помощью какого запроса вызывать "Товары" по "Артикулу" и менять им "Количество"? Как это грамотнее организовать: через php админки или напрямую через MySQL?

 

P.S. по форуму копался, ничего не нашел. Но подозреваю, что такая тема должна быть... если так, то ткните пальцем пожалуйста:mellow:

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


Я предполагаю все должно выполняться через запрос 

UPDATE`таблица товаров` SET `количество`= (SELECT таблица артикулов('артикул') - `новое количество`)

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


11 минут назад, erikm сказал:

UPDATE`таблица товаров` SET `количество`= (SELECT таблица артикулов('артикул') - `новое количество`)

Вы проверяли такую конструкцию?

 

Где у вас привязка к артикулу

1. создать временную таблицу из нужных значений

 

2. Выполнить запрос

 

UPDATE product p  JOIN tmp_table t ON p.ариткул = t.артикул
SET p.quantity = t.quantity

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

1 час назад, chukcha сказал:

Вы проверяли такую конструкцию?

 

Где у вас привязка к артикулу

1. создать временную таблицу из нужных значений

 

2. Выполнить запрос

Вечером освобожусь сделаю,  потом отпишусь. За наводку спасибо.  А как все таки правильнее через php или напрямую? Количество товаров в бд только в одном столбце хранится по умолчанию? 

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


С помощью запроса, проверил правильно ли я понимал где находятся нужные мне величины. Артикул у меня совпадает с моделью, а id самого атрибута "артикул" равен 4

select 
    p.product_id, 
    d.name,
    p.model,
    p.quantity
from oc_product p
    join oc_product_description d on d.product_id = p.product_id
where p.model = 'Артикул';

Для теста без таблиц такой запрос подойдет?

update oc_product p  
set p.quantity = 'количество'
where p.model = 'Артикул';

Хотелось бы еще сверить равенство модели и артикула, ведь человеческий фактор упускать нельзя:unsure:. Я так понял нужно добавить and с условием равенства. Что-то типо такого?

update oc_product p  
join oc_product_attribute a on a.attribute_id = '4' and a.product_id = p.product_id and a.text = p.model
set p.quantity = 'количество'
where p.model = 'Артикул';

 

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


Чего?

 

 

Вы поясните что вы хотите..

А то вы сейчас насочиняете запросов...

 

И.. не забудьте!!!!! БЕКАП, БЕКАП, БЕКАП..

 

select 
    p.product_id, 
    d.name,
    p.model,
    p.quantity
from oc_product p
    join oc_product_description d on d.product_id = p.product_id

Это запрос не универсален, работает только при наличии одного языка..

 

Для правильного запроса нужно еще language_id

 

Но ладно, это не совсем важно

 

 

 

 

 

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

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

Чего?

 

 

Вы поясните что вы хотите..

А то вы сейчас насочиняете запросов...

 

И.. не забудьте!!!!! БЕКАП, БЕКАП, БЕКАП..

Бекап само собой :)  Что хочу, написал в первом посте. Но для теста код привел для конкретных значений, а не таблиц. Вот и спрашиваю правильно или нет?

 

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

Для правильного запроса нужно еще language_id

На сайте 1 язык

 

P.S. Я конечно пониманию, что эти запросы будут работать. Но вот меня всегда в таких вещах заботит "на сколько хорошо". Поэтому и надеюсь на коментарии местных сторожил 

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


Где у вас есть массив артикулов?

 

Причем здесь таблица атрибутов?

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

Но вот меня всегда в таких вещах заботит "на сколько хорошо"

А пофик, главное чтоб работали..
Ведь у вас это одноразовый запрос..

Конечно, было бы правильно написать оптимальный запрос, быстрый, не нагрузочный, построить план запроса, индексы проставить :)
Потратить на это много времени и чувствовать себя на вершине счастья! мой запрос выполнился за 200 мс, а не оптимизированный выполнялся аж 1 сек...



 

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

23 часа назад, chukcha сказал:

Где у вас есть массив артикулов?

 

Причем здесь таблица атрибутов?

Все, сделал таблицу :) Заполнил ее данными через .csv

CREATE TABLE tmp_table (
    model varchar(64) NOT NULL,
    quantity int(4) NOT NULL,
    PRIMARY KEY (model)
);

 

Артикулы у товаров заданы в виде "Модели" и Атрибута с id=4. Запрос тогда должен выглядеть так?

update oc_product p  
join oc_product_attribute a on a.attribute_id = '4' and a.product_id = p.product_id and a.text = p.model
join tmp_table t on t.model = p.model
set p.quantity = t.quantity

 

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


ага похоже

 

Как рекомендация, пишите ключевые слова sql прописными
много времени не потеряете, а читабельность кода выше

 

Ну, разве что  я бы чуть не так строид бы логику..
Но это не важно

UPDATE oc_product p  
JOIN tmp_table t ON t.model = p.model
JOIN oc_product_attribute a ON a.attribute_id = '4' AND a.product_id = p.product_id AND a.text = t.model
SET p.quantity = t.quantity

обратите внимание

 

 a.text = t.model

Т.е. я как бы отсеиваю по t таблице, а не  по p

 

 

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

11 минут назад, n3bo сказал:

а почему нельзя записать артикул в sku и все?)

 

Нужно было отображение Артикула в виде атрибута с определенным классом, чтобы пользователь не искал информацию по всей форме товара. Поэтому принял такое решение

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


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

a.text = t.model

Т.е. я как бы отсеиваю по t таблице, а не  по p

Логично, первым действием я ведь уже отсеял по p таблице. Программировать начал с Си, дошел до С#... с открытием магазина пришел к выводу, что нужно еще знание SQL. Запросы не сложные, но все упирается в затраченное время на их обработку. Буду учиться :)

 

Как теперь все это обернуть в php? Я в том плане, что движек ocstore, скорее всего уже имеет встроенные функции работы с бд. Где почитать или покопаться?

На хабра нашел код для загрузки .csv, но нет ли встроенных функций?

Спойлер

function import_csv(
		$table,         // Имя таблицы для импорта
        $afields,         // Массив строк - имен полей таблицы
        $filename,          // Имя CSV файла, откуда берется информация 
                    // (путь от корня web-сервера)
        $delim=',',          // Разделитель полей в CSV файле
        $enclosed='"',      // Кавычки для содержимого полей
        $escaped='\\',          // Ставится перед специальными символами
        $lineend='\\r\\n',       // Чем заканчивается строка в файле CSV
        $hasheader=FALSE){      // Пропускать ли заголовок CSV
    if($hasheader) $ignore = "IGNORE 1 LINES ";
    else $ignore = "";
    $q_import = 
    "LOAD DATA INFILE '".
        $_SERVER['DOCUMENT_ROOT'].$filename."' INTO TABLE ".$table." ".
    "FIELDS TERMINATED BY '".$delim."' ENCLOSED BY '".$enclosed."' ".
    "    ESCAPED BY '".$escaped."' ".
    "LINES TERMINATED BY '".$lineend."' ".
    $ignore.
    "(".implode(',', $afields).")"
    ;
        return mysql_query($q_import);
    }

 

 

Перед загрузкой необходимо очищать tmp_table . Скорее всего как-то так: 

TRUNCATE TABLE tmp_table;

 

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


1 час назад, erikm сказал:

 

Нужно было отображение Артикула в виде атрибута с определенным классом, чтобы пользователь не искал информацию по всей форме товара. Поэтому принял такое решение

вывести артикул в поле с атрибутами.
дублировать в атрибут

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


Атрибуты обычно во вкладке, артикул же можно вывести как хочешь и выделить как хочешь. Я делал так:

Название товара (Код - Артикул) 

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


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

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

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

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

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

Вхід

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

Вхід зараз

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

Important Information

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