Веб-Сервер

Полезные запросы в MySQL. Opencart

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();
?>
0

Автор публикации

не в сети 8 месяцев

Илья Коковин

Аватар 0
Комментарии: 0Публикации: 34Регистрация: 30-05-2019

Добавить комментарий

Ваш адрес email не будет опубликован.

Авторизация
*
*
Регистрация
*
*
*
Пароль не введен
*
Генерация пароля