1. Сортировка опций в зависимости от наличия цены на опцию
UPDATE с условием данных из другой таблицы. Если в Таблице oc_product_option_value в поле price цена Есть больше нуля, то запишет значение 100 в поле sort_order в таблицу oc_option_value.
UPDATE oc_option_value t1, (SELECT option_value_id, price FROM oc_product_option_value) t2 SET t1.sort_order = 100 WHERE t1.option_value_id is not null AND t1.option_value_id = t2.option_value_id AND t2.price > 0
2. Обновление цен в регионах
DELETE этот запрос делал для обновления цен в регионах. Организовал через стандартные Скидки, Акции. Товары периодически обновляются через модуль AnyCSV. Запрос удаляет все позиции из таблицы для Группы покупателей: customer_group_id= 1 c Приоритетом priority=999
$custg_id = 1; $this_num_row = $this->db->query("DELETE FROM " . DB_PREFIX . "product_discount WHERE customer_group_id= ".$custg_id." AND priority=999"); $this_num_row = $this->db->query("DELETE FROM " . DB_PREFIX . "product_special WHERE customer_group_id= ".$custg_id." AND priority=999");
После мы загружаем новые цены для определенной Группы покупателей ID=1 и попутно устанавливаем priority=991 для запроса в конце всей процедуры. (Подробно о том как мы организовали мультирегиональный интернет-магазин с автоматической системой обновления товаров) Перейти….
$custg_id = 1; $result_dis_ac1 = $this->db->query("UPDATE LOW_PRIORITY " . DB_PREFIX . "product_discount SET quantity=1, priority=999, date_start=0000-00-00 WHERE priority=991 AND customer_group_id=".$custg_id.""); $result_dis_ac2 = $this->db->query("UPDATE LOW_PRIORITY " . DB_PREFIX . "product_special SET priority=999, date_start=0000-00-00 WHERE priority=991 AND customer_group_id=".$custg_id."");
Конкретным командам INSERT, UPDATE или DELETE можно назначить более низкий приоритет с помощью атрибута LOW_PRIORITY.
Поскольку обновление обычно считается более важной операцией, чем SELECT, то все команды, производящие обновления таблицы, имеют более высокий приоритет, чем команды извлечения данных. Такой алгоритм гарантирует, что обновления не зависнут в случае, если для некоторой таблицы выполняется большое количество тяжелых запросов (этот порядок действий можно изменить, используя LOW_PRIORITY с командой обновления или HIGH_PRIORITY с командой SELECT).
3. Обновление остатков и статусов товара
<?php /* * Скрипт для запуска автоматической установки статуса Товар снят с производства Количество: -1 -- старые товары youroom 3 месяца не обновлялись Количество: -2 -- SL товары youroom выключаем товары без кнопки купить Количество: 0 -- товары которых нет в xml youroom но мы их оставляем у себя до тех пор пока дата обновления товара не достигнет 3 месяца Количество: 1 -- 'На складе производителя' берем из xml Количество: 10 -- 'В наличие' берем из xml stock_status_id = '13' --- Товар в архиве stock_status_id = '11' --- Cнят с производства stock_status_id = '10' --- На складе stock_status_id = '7' --- В наличии stock_status_id = '12' --- На складе производителя stock_status_id = '5' --- Нет в наличии stock_status_id = '6' --- Ожидание 2-3 дня stock_status_id = '8' --- Предзаказ */ // Configuration require_once('config.php'); // DB connect $mysqli = new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); if ($mysqli->connect_errno) { echo "Error connecting to MySQL: (" . $mysqli->connect_errno . ")"; } else { echo "Succeeded to MySQL:"; } $sql1 = "UPDATE `". DB_PREFIX ."product` SET `quantity` = '-2', `stock_status_id` = '13' WHERE `product_id` IN (SELECT `product_id` FROM `". DB_PREFIX ."product_description` WHERE `name` LIKE '%SL')"; $sql2 = "UPDATE `". DB_PREFIX ."product` SET `quantity` = '-1', `stock_status_id` = '11' WHERE `quantity` not in (-2,1,10) AND `location` = 'youroom.ru' AND `date_modified` < DATE_SUB(NOW(), INTERVAL 3 MONTH)"; $sql3 = "UPDATE `". DB_PREFIX ."product` SET `stock_status_id` = '10' WHERE `quantity`= '0'"; $res = $mysqli->query($sql1); $res = $mysqli->query($sql2); $res = $mysqli->query($sql3); if ($mysqli->error) { trigger_error('Error: ' . $mysqli->error . ' Error No: ' . $mysqli->errno . ' ' . $sql1,$sql2,$sql3); echo 'Error MySQL ' . $mysqli->error; exit(); } if ($mysqli->query($sql1) === TRUE||$mysqli->query($sql2) === TRUE||$mysqli->query($sql3) === TRUE) { echo "Record updated successfully"; } else { echo "Error updating record: " . $mysqli->error; } $mysqli->close(); ?>