Зная такие вещи и как они делаются, понимая логику их работы, можно стать настоящим ниндзя не только PrestaShop но и SQL.
Перед началом статьи Нужно задвать больше текста.
Отключить товары
1 |
UPDATE `database`.`ps_product` SET `active` = '0' WHERE `ps_product`.`id_product` IN ( 264, 305, 288, 126, 295, 303, 286, 293, 300, 335, 284, 846, 308, 837, 291, 333, 132, 844, 106, 306, 289, 287, 119, 840, 294, 285, 292, 299, 334, 133, 290, 332, 827, 323, 330, 321, 328, 326, 324, 331, 322, 329, 327, 325, 312, 367, 365, 371, 828, 316, 851, 835, 368, 366, 319, 363 ) |
Выборка характеристик с английским языком по умолчанию.
1 2 3 4 5 |
SELECT * FROM ps_feature_value_lang, ps_feature_product WHERE ps_feature_value_lang.id_lang =1 AND ps_feature_value_lang.id_feature_value = ps_feature_product.id_feature_value ORDER BY `ps_feature_product`.`id_feature` ASC |
Выборка товаров с характеристиками, по умолчанию язык английский, выборка характеристик только с 16 id
1 2 3 4 5 6 |
SELECT * FROM ps_feature_value_lang, ps_feature_product, ps_product WHERE ps_feature_value_lang.id_lang =1 AND ps_feature_value_lang.id_feature_value = ps_feature_product.id_feature_value AND ps_feature_product.id_feature =16 AND ps_product.id_product = ps_feature_product.id_product ORDER BY `ps_feature_product`.`id_feature` ASC |
Интересный SQL – поиск шаблонов, удоволетворяющих условию, оператора LIKE + конкатенация строк. Выбираем все товары с характеристикой 1.5
1 2 3 4 5 6 7 |
SELECT * FROM ps_feature_value_lang, ps_feature_product, ps_product WHERE ps_feature_value_lang.id_lang =6 AND ps_feature_value_lang.value LIKE CONCAT('%', 1.5 ,'%') AND ps_feature_value_lang.id_feature_value = ps_feature_product.id_feature_value AND ps_feature_product.id_feature =15 AND ps_product.id_product = ps_feature_product.id_product ORDER BY `ps_feature_product`.`id_feature` ASC |
Узнаем только номера товаров с характеристикой 1.5 через артикулы.
1 2 3 4 5 6 |
SELECT * FROM ps_product,ps_product_lang WHERE ps_product_lang.id_lang = 6 AND ps_product.reference > 1 AND ps_product.id_product = ps_product_lang.id_product ORDER BY ps_product.reference ASC |
Выборка 1 заказа
1 2 3 4 5 6 7 |
SELECT ps_orders.`id_order` , `product_id` , `product_reference` FROM `ps_order_detail` LEFT JOIN `ps_product` ON ( ps_order_detail.`product_id` = ps_product.`id_product` ) LEFT JOIN `ps_orders` ON ( ps_order_detail.`id_order` = ps_orders.`id_order` ) WHERE ps_orders.id_order = 1 ORDER BY product_reference ASC LIMIT 0 , 30 |
Как сделать обновление с одной таблицы, чтобы изменения сохранились в другой. На примере обновления артикулов.
1 |
UPDATE ps_product_attribute,ps_product SET ps_product_attribute.reference = ps_product.reference, ps_product_attribute.id_product = ps_product.id_product WHERE ps_product_attribute.id_product = ps_product.id_product |
Копирование товара в другие категории из 1 таблицы
1 2 3 4 5 6 7 |
INSERT INTO ps_category_product (id_category, id_product, position) select 1, id_product, position from ps_category_product as c where id_category = 2; |
Обновление после парсера
1 2 3 |
UPDATE ps_feature_value SET custom = 0; UPDATE ps_category_product SET ps_category_product.id_category = 8 WHERE ps_category_product.id_category = 32 |
Обновление с 2 таблиц – Устранение ошибок.
1 2 3 4 5 |
UPDATE ps_product_lang, ps_product SET ps_product_lang.svchangelog = 'текст' WHERE ps_product.id_manufacturer = 235 AND ps_product.id_product = ps_product_lang.id_product AND id_lang =6 |
Выборка категории нескольких
1 |
SELECT * FROM `ps_category` WHERE `ps_category`.`id_category` IN (32,13,18,23,14,22) |
Ищем несвпадающие поля из 2 таблиц (Запрос с подзапросом)
1 2 3 4 5 6 7 8 9 |
SELECT * FROM ps_product WHERE ps_product.id_product NOT IN ( SELECT ps_product.id_product FROM ps_product, ps_product_download WHERE ps_product.id_product = ps_product_download.id_product ) LIMIT 0 , 30 |
Коментарии0 новых