remix8080 Опубліковано: 27 червня 2022 Share Опубліковано: 27 червня 2022 Вітаю. Спекотно, підтуплюю ( Допоможіть, будь ласка, скласти запит по вибірці з таблиці oc_product всіх product_id, для яких в oc_product_option_value залишок всіх опцій рівний 0 (quantity=0). Наперед дякую! Надіслати Поділитися на інших сайтах More sharing options...
remix8080 Опубліковано: 27 червня 2022 Автор Share Опубліковано: 27 червня 2022 (змінено) Пробую так (поки з таблиці oc_product_option_value): SELECT prov.product_id, prov.quantity FROM oc_product_option_value prov GROUP BY prov.product_id, prov.quantity HAVING MAX(prov.quantity)=0 ORDER BY 1 але попадаються товари, в яких є ненульові залишки опцій ( Змінено 27 червня 2022 користувачем remix8080 Надіслати Поділитися на інших сайтах More sharing options...
remix8080 Опубліковано: 28 червня 2022 Автор Share Опубліковано: 28 червня 2022 Питання знято. SELECT prov.product_id FROM oc_product_option_value prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ORDER BY 1 Надіслати Поділитися на інших сайтах More sharing options...
remix8080 Опубліковано: 1 липня 2022 Автор Share Опубліковано: 1 липня 2022 Вітаю. Допоможіть, будь ласка, прискорити запит. Потрібно в таблиці oc_product обнулити залишки товарів, для яких залишок опцій рівний 0. При кількості записів ~15К в oc_product і ~3,5К в oc_product_option_value запит UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0); виконується кілька хвилин - якось нефеншуйно ( Надіслати Поділитися на інших сайтах More sharing options...
remix8080 Опубліковано: 2 липня 2022 Автор Share Опубліковано: 2 липня 2022 Специ, підкажіть, як можна оптимізувати/прискорити цей запит? Виконується більше 3 хв ( UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0); Сам селект SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 виконується практично миттєво. Надіслати Поділитися на інших сайтах More sharing options...
nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 Такий запит буде швидше, (при наймні в данному випадку): SELECT DISTINCT prov.product_id FROM `oc_product_option_value` prov WHERE `quantity` = 0 аніж Ваш SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 А час виконання апдейту залежіть, мені здається, від того, яку кількість product_id повертає попередній запит. Тому в UPDATE краще зменьшити кількість апдейтів, додавши в запит перевірку на кількість. UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.quantity > 0 AND pr.product_id IN (SELECT DISTINCT prov.product_id FROM `oc_product_option_value` prov WHERE `quantity` = 0); Таким чином не будуть апдейтітись поля, в яких ВЖЕ кількість дорівнює 0. 1 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 2 липня 2022 Автор Share Опубліковано: 2 липня 2022 03.07.2022 в 01:02, nogocuHoBuk сказал: Такий запит буде швидше, (при наймні в данному випадку): SELECT DISTINCT prov.product_id FROM `oc_product_option_value` prov WHERE `quantity` = 0 аніж Ваш Не варіант. Цей видасть товари, в яких ХОЧА Б ОДНА опція має залишок 0. А я вибираю ВСІ такі товари. Та й швидість цього запиту практично не береться до уваги. Результат видає не багато, ~ 200 товарів. 03.07.2022 в 01:02, nogocuHoBuk сказал: Тому в UPDATE краще зменьшити кількість апдейтів, додавши в запит перевірку на кількість. UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.quantity > 0 AND pr.product_id IN (SELECT DISTINCT prov.product_id FROM `oc_product_option_value` prov WHERE `quantity` = 0); Таким чином не будуть апдейтітись поля, в яких ВЖЕ кількість дорівнює 0. Перевірку не додавав, думав, не дасть приросту. Але все-таки при pr.quantity>0 зменшився час з 210с до 160с. Вже результат ) П.С. Вдячний за відповідь. Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 03.07.2022 в 01:41, remix8080 сказал: А я вибираю ВСІ такі товари. Так. То вже я тупанув. 03.07.2022 в 01:41, remix8080 сказал: Перевірку не додавав, думав, не дасть приросту. Але все-таки при pr.quantity>0 зменшився час з 210с до 160с. Вже результат ) При повторному запиті має зрости до 0. (звісно залежить від часу виконання SELECT'а) Тому краще повісити на крон раз в день/12 годин/годину в залежності від кількості продаж. Може раз на день, а може й раз на годину При періодичному виконанні кількість апдейтів буде стабільно мала. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 2 липня 2022 Автор Share Опубліковано: 2 липня 2022 Всі наступні запити також виконуються такий самий час (~160с). П.С. Саме на крон і планую згодом повісити деякий "пучок" запитів. Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 03.07.2022 в 01:54, remix8080 сказал: такий самий час (~160с). додайте oc_product_quantity до индексу ALTER TABLE `oc_product` ADD INDEX(`quantity`) І насолоджуйтесь Бо перший запит апдейта до кількості. Дайте змогу вибрати значення миттєво (в переносному сенсі, звісно). Навіть при 15к записів навіть 160 секунд це ДУЖЕ багато. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 2 липня 2022 Автор Share Опубліковано: 2 липня 2022 Індекс додав. Час не змінився. Та то вже таке... Ще раз вдячний за допомогу! Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 03.07.2022 в 02:07, remix8080 сказал: Індекс додав. Час не змінився. Це все "Stranger Things" Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Задля наочності написав у кілька рядків. Суть полягає в тому, що SELECT вибирає лише ті product_id для IN, де кількіть в oc_product більше 0 Ну і таке рішення само по собі буде швидше. Ваше перше рішення: 1.37 секунд Скрытый текст Мій перший варіант, з додаванням перевірки кількості: 0.79 секунд Скрытый текст Остаточне рішення: 0.05 секунд Скрытый текст Нарешті можу і в люлю) 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 откажитесь от IN Используйте JOIN Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 02:53, nogocuHoBuk сказал: Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Брр, не знаю як, але відпрацювало практично моментально. Розбиратися/аналізувати вже буду завтра ) 03.07.2022 в 02:53, nogocuHoBuk сказал: Нарешті можу і в люлю) Як в Петрика П'яточкіна. "Ура, 10 слоненят. Тепер я засну" ))) Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 03:07, chukcha сказал: откажитесь от IN Используйте JOIN Пробував, експериментував - не вийшло ( Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 03:36, remix8080 сказал: Пробував, експериментував - не вийшло ( покажіть спробу Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Доброго дня. 03.07.2022 в 10:37, chukcha сказал: покажіть спробу Якось так UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) ON pr.product_id = prov.product_id SET pr.quantity = 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 меня смущает MAX Зачем он вам если вам нужны опции с quantity 0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Для одного товару з oc_product може бути кілька записів в oc_product_option_value, серед яких не всі quantity=0. Тому через MAX вибираю всі нульові. Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:50, remix8080 сказал: Тому через MAX вибираю всі нульові. Мені здається (я навіть впевнений) що SUM() буде працювати швидше, ніж MAX() SUM(prov.quantity)=0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 (змінено) Думаю, не істотно, оскільки запит з MAX виконується практично моментально. UPD. При великій кількості записів в oc_product_option_value - безперечно. Змінено 3 липня 2022 користувачем remix8080 Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:53, remix8080 сказал: Думаю, не істотно КРщае перевірити SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 а потім SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING SUM(prov.quantity)=0 Бо на моїх 100 записах час в межах похибки У Вас точніше буде. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 При ~ 3,5К записів в oc_product_option_value один і другий запит 0,0018с Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 15:16, remix8080 сказал: Якось так Доречі. У Вас тут має бідкатися БД на те, що немає аліасів. Потрібно якось так: UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) AS per ON pr.product_id = per.product_id SET pr.quantity = 0 WHERE pr.quantity > 0 (додав ще й перевірку на кількість більше 0) Але мені здається цей запит будет довшим за той, що я пропонував раніше. Бо там для IN вибираються виключно ті product_id у яких кількість в oc_product більше 0. В останньому ж запиті кількість записів для обробки значно більша. PS. Ну і в такому вигляді потестуйте чи є різниця між SUM та MAX. То вже мені на майбутнє Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница Вибір товарів, в яких залишок по опціях = 0 Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
remix8080 Опубліковано: 2 липня 2022 Автор Share Опубліковано: 2 липня 2022 03.07.2022 в 01:02, nogocuHoBuk сказал: Такий запит буде швидше, (при наймні в данному випадку): SELECT DISTINCT prov.product_id FROM `oc_product_option_value` prov WHERE `quantity` = 0 аніж Ваш Не варіант. Цей видасть товари, в яких ХОЧА Б ОДНА опція має залишок 0. А я вибираю ВСІ такі товари. Та й швидість цього запиту практично не береться до уваги. Результат видає не багато, ~ 200 товарів. 03.07.2022 в 01:02, nogocuHoBuk сказал: Тому в UPDATE краще зменьшити кількість апдейтів, додавши в запит перевірку на кількість. UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.quantity > 0 AND pr.product_id IN (SELECT DISTINCT prov.product_id FROM `oc_product_option_value` prov WHERE `quantity` = 0); Таким чином не будуть апдейтітись поля, в яких ВЖЕ кількість дорівнює 0. Перевірку не додавав, думав, не дасть приросту. Але все-таки при pr.quantity>0 зменшився час з 210с до 160с. Вже результат ) П.С. Вдячний за відповідь. Надіслати Поділитися на інших сайтах More sharing options...
nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 03.07.2022 в 01:41, remix8080 сказал: А я вибираю ВСІ такі товари. Так. То вже я тупанув. 03.07.2022 в 01:41, remix8080 сказал: Перевірку не додавав, думав, не дасть приросту. Але все-таки при pr.quantity>0 зменшився час з 210с до 160с. Вже результат ) При повторному запиті має зрости до 0. (звісно залежить від часу виконання SELECT'а) Тому краще повісити на крон раз в день/12 годин/годину в залежності від кількості продаж. Може раз на день, а може й раз на годину При періодичному виконанні кількість апдейтів буде стабільно мала. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 2 липня 2022 Автор Share Опубліковано: 2 липня 2022 Всі наступні запити також виконуються такий самий час (~160с). П.С. Саме на крон і планую згодом повісити деякий "пучок" запитів. Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 03.07.2022 в 01:54, remix8080 сказал: такий самий час (~160с). додайте oc_product_quantity до индексу ALTER TABLE `oc_product` ADD INDEX(`quantity`) І насолоджуйтесь Бо перший запит апдейта до кількості. Дайте змогу вибрати значення миттєво (в переносному сенсі, звісно). Навіть при 15к записів навіть 160 секунд це ДУЖЕ багато. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 2 липня 2022 Автор Share Опубліковано: 2 липня 2022 Індекс додав. Час не змінився. Та то вже таке... Ще раз вдячний за допомогу! Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 03.07.2022 в 02:07, remix8080 сказал: Індекс додав. Час не змінився. Це все "Stranger Things" Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Задля наочності написав у кілька рядків. Суть полягає в тому, що SELECT вибирає лише ті product_id для IN, де кількіть в oc_product більше 0 Ну і таке рішення само по собі буде швидше. Ваше перше рішення: 1.37 секунд Скрытый текст Мій перший варіант, з додаванням перевірки кількості: 0.79 секунд Скрытый текст Остаточне рішення: 0.05 секунд Скрытый текст Нарешті можу і в люлю) 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 откажитесь от IN Используйте JOIN Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 02:53, nogocuHoBuk сказал: Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Брр, не знаю як, але відпрацювало практично моментально. Розбиратися/аналізувати вже буду завтра ) 03.07.2022 в 02:53, nogocuHoBuk сказал: Нарешті можу і в люлю) Як в Петрика П'яточкіна. "Ура, 10 слоненят. Тепер я засну" ))) Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 03:07, chukcha сказал: откажитесь от IN Используйте JOIN Пробував, експериментував - не вийшло ( Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 03:36, remix8080 сказал: Пробував, експериментував - не вийшло ( покажіть спробу Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Доброго дня. 03.07.2022 в 10:37, chukcha сказал: покажіть спробу Якось так UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) ON pr.product_id = prov.product_id SET pr.quantity = 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 меня смущает MAX Зачем он вам если вам нужны опции с quantity 0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Для одного товару з oc_product може бути кілька записів в oc_product_option_value, серед яких не всі quantity=0. Тому через MAX вибираю всі нульові. Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:50, remix8080 сказал: Тому через MAX вибираю всі нульові. Мені здається (я навіть впевнений) що SUM() буде працювати швидше, ніж MAX() SUM(prov.quantity)=0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 (змінено) Думаю, не істотно, оскільки запит з MAX виконується практично моментально. UPD. При великій кількості записів в oc_product_option_value - безперечно. Змінено 3 липня 2022 користувачем remix8080 Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:53, remix8080 сказал: Думаю, не істотно КРщае перевірити SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 а потім SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING SUM(prov.quantity)=0 Бо на моїх 100 записах час в межах похибки У Вас точніше буде. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 При ~ 3,5К записів в oc_product_option_value один і другий запит 0,0018с Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 15:16, remix8080 сказал: Якось так Доречі. У Вас тут має бідкатися БД на те, що немає аліасів. Потрібно якось так: UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) AS per ON pr.product_id = per.product_id SET pr.quantity = 0 WHERE pr.quantity > 0 (додав ще й перевірку на кількість більше 0) Але мені здається цей запит будет довшим за той, що я пропонував раніше. Бо там для IN вибираються виключно ті product_id у яких кількість в oc_product більше 0. В останньому ж запиті кількість записів для обробки значно більша. PS. Ну і в такому вигляді потестуйте чи є різниця між SUM та MAX. То вже мені на майбутнє Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница Вибір товарів, в яких залишок по опціях = 0 Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
remix8080 Опубліковано: 2 липня 2022 Автор Share Опубліковано: 2 липня 2022 Всі наступні запити також виконуються такий самий час (~160с). П.С. Саме на крон і планую згодом повісити деякий "пучок" запитів. Надіслати Поділитися на інших сайтах More sharing options...
nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 03.07.2022 в 01:54, remix8080 сказал: такий самий час (~160с). додайте oc_product_quantity до индексу ALTER TABLE `oc_product` ADD INDEX(`quantity`) І насолоджуйтесь Бо перший запит апдейта до кількості. Дайте змогу вибрати значення миттєво (в переносному сенсі, звісно). Навіть при 15к записів навіть 160 секунд це ДУЖЕ багато. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 2 липня 2022 Автор Share Опубліковано: 2 липня 2022 Індекс додав. Час не змінився. Та то вже таке... Ще раз вдячний за допомогу! Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 03.07.2022 в 02:07, remix8080 сказал: Індекс додав. Час не змінився. Це все "Stranger Things" Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Задля наочності написав у кілька рядків. Суть полягає в тому, що SELECT вибирає лише ті product_id для IN, де кількіть в oc_product більше 0 Ну і таке рішення само по собі буде швидше. Ваше перше рішення: 1.37 секунд Скрытый текст Мій перший варіант, з додаванням перевірки кількості: 0.79 секунд Скрытый текст Остаточне рішення: 0.05 секунд Скрытый текст Нарешті можу і в люлю) 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 откажитесь от IN Используйте JOIN Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 02:53, nogocuHoBuk сказал: Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Брр, не знаю як, але відпрацювало практично моментально. Розбиратися/аналізувати вже буду завтра ) 03.07.2022 в 02:53, nogocuHoBuk сказал: Нарешті можу і в люлю) Як в Петрика П'яточкіна. "Ура, 10 слоненят. Тепер я засну" ))) Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 03:07, chukcha сказал: откажитесь от IN Используйте JOIN Пробував, експериментував - не вийшло ( Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 03:36, remix8080 сказал: Пробував, експериментував - не вийшло ( покажіть спробу Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Доброго дня. 03.07.2022 в 10:37, chukcha сказал: покажіть спробу Якось так UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) ON pr.product_id = prov.product_id SET pr.quantity = 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 меня смущает MAX Зачем он вам если вам нужны опции с quantity 0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Для одного товару з oc_product може бути кілька записів в oc_product_option_value, серед яких не всі quantity=0. Тому через MAX вибираю всі нульові. Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:50, remix8080 сказал: Тому через MAX вибираю всі нульові. Мені здається (я навіть впевнений) що SUM() буде працювати швидше, ніж MAX() SUM(prov.quantity)=0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 (змінено) Думаю, не істотно, оскільки запит з MAX виконується практично моментально. UPD. При великій кількості записів в oc_product_option_value - безперечно. Змінено 3 липня 2022 користувачем remix8080 Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:53, remix8080 сказал: Думаю, не істотно КРщае перевірити SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 а потім SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING SUM(prov.quantity)=0 Бо на моїх 100 записах час в межах похибки У Вас точніше буде. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 При ~ 3,5К записів в oc_product_option_value один і другий запит 0,0018с Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 15:16, remix8080 сказал: Якось так Доречі. У Вас тут має бідкатися БД на те, що немає аліасів. Потрібно якось так: UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) AS per ON pr.product_id = per.product_id SET pr.quantity = 0 WHERE pr.quantity > 0 (додав ще й перевірку на кількість більше 0) Але мені здається цей запит будет довшим за той, що я пропонував раніше. Бо там для IN вибираються виключно ті product_id у яких кількість в oc_product більше 0. В останньому ж запиті кількість записів для обробки значно більша. PS. Ну і в такому вигляді потестуйте чи є різниця між SUM та MAX. То вже мені на майбутнє Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница Вибір товарів, в яких залишок по опціях = 0 Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
remix8080 Опубліковано: 2 липня 2022 Автор Share Опубліковано: 2 липня 2022 Індекс додав. Час не змінився. Та то вже таке... Ще раз вдячний за допомогу! Надіслати Поділитися на інших сайтах More sharing options...
nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 03.07.2022 в 02:07, remix8080 сказал: Індекс додав. Час не змінився. Це все "Stranger Things" Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Задля наочності написав у кілька рядків. Суть полягає в тому, що SELECT вибирає лише ті product_id для IN, де кількіть в oc_product більше 0 Ну і таке рішення само по собі буде швидше. Ваше перше рішення: 1.37 секунд Скрытый текст Мій перший варіант, з додаванням перевірки кількості: 0.79 секунд Скрытый текст Остаточне рішення: 0.05 секунд Скрытый текст Нарешті можу і в люлю) 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 откажитесь от IN Используйте JOIN Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 02:53, nogocuHoBuk сказал: Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Брр, не знаю як, але відпрацювало практично моментально. Розбиратися/аналізувати вже буду завтра ) 03.07.2022 в 02:53, nogocuHoBuk сказал: Нарешті можу і в люлю) Як в Петрика П'яточкіна. "Ура, 10 слоненят. Тепер я засну" ))) Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 03:07, chukcha сказал: откажитесь от IN Используйте JOIN Пробував, експериментував - не вийшло ( Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 03:36, remix8080 сказал: Пробував, експериментував - не вийшло ( покажіть спробу Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Доброго дня. 03.07.2022 в 10:37, chukcha сказал: покажіть спробу Якось так UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) ON pr.product_id = prov.product_id SET pr.quantity = 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 меня смущает MAX Зачем он вам если вам нужны опции с quantity 0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Для одного товару з oc_product може бути кілька записів в oc_product_option_value, серед яких не всі quantity=0. Тому через MAX вибираю всі нульові. Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:50, remix8080 сказал: Тому через MAX вибираю всі нульові. Мені здається (я навіть впевнений) що SUM() буде працювати швидше, ніж MAX() SUM(prov.quantity)=0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 (змінено) Думаю, не істотно, оскільки запит з MAX виконується практично моментально. UPD. При великій кількості записів в oc_product_option_value - безперечно. Змінено 3 липня 2022 користувачем remix8080 Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:53, remix8080 сказал: Думаю, не істотно КРщае перевірити SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 а потім SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING SUM(prov.quantity)=0 Бо на моїх 100 записах час в межах похибки У Вас точніше буде. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 При ~ 3,5К записів в oc_product_option_value один і другий запит 0,0018с Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 15:16, remix8080 сказал: Якось так Доречі. У Вас тут має бідкатися БД на те, що немає аліасів. Потрібно якось так: UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) AS per ON pr.product_id = per.product_id SET pr.quantity = 0 WHERE pr.quantity > 0 (додав ще й перевірку на кількість більше 0) Але мені здається цей запит будет довшим за той, що я пропонував раніше. Бо там для IN вибираються виключно ті product_id у яких кількість в oc_product більше 0. В останньому ж запиті кількість записів для обробки значно більша. PS. Ну і в такому вигляді потестуйте чи є різниця між SUM та MAX. То вже мені на майбутнє Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница Вибір товарів, в яких залишок по опціях = 0 Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
nogocuHoBuk Опубліковано: 2 липня 2022 Share Опубліковано: 2 липня 2022 Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Задля наочності написав у кілька рядків. Суть полягає в тому, що SELECT вибирає лише ті product_id для IN, де кількіть в oc_product більше 0 Ну і таке рішення само по собі буде швидше. Ваше перше рішення: 1.37 секунд Скрытый текст Мій перший варіант, з додаванням перевірки кількості: 0.79 секунд Скрытый текст Остаточне рішення: 0.05 секунд Скрытый текст Нарешті можу і в люлю) 1 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 откажитесь от IN Используйте JOIN Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 02:53, nogocuHoBuk сказал: Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Брр, не знаю як, але відпрацювало практично моментально. Розбиратися/аналізувати вже буду завтра ) 03.07.2022 в 02:53, nogocuHoBuk сказал: Нарешті можу і в люлю) Як в Петрика П'яточкіна. "Ура, 10 слоненят. Тепер я засну" ))) Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 03:07, chukcha сказал: откажитесь от IN Используйте JOIN Пробував, експериментував - не вийшло ( Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 03:36, remix8080 сказал: Пробував, експериментував - не вийшло ( покажіть спробу Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Доброго дня. 03.07.2022 в 10:37, chukcha сказал: покажіть спробу Якось так UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) ON pr.product_id = prov.product_id SET pr.quantity = 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 меня смущает MAX Зачем он вам если вам нужны опции с quantity 0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Для одного товару з oc_product може бути кілька записів в oc_product_option_value, серед яких не всі quantity=0. Тому через MAX вибираю всі нульові. Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:50, remix8080 сказал: Тому через MAX вибираю всі нульові. Мені здається (я навіть впевнений) що SUM() буде працювати швидше, ніж MAX() SUM(prov.quantity)=0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 (змінено) Думаю, не істотно, оскільки запит з MAX виконується практично моментально. UPD. При великій кількості записів в oc_product_option_value - безперечно. Змінено 3 липня 2022 користувачем remix8080 Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:53, remix8080 сказал: Думаю, не істотно КРщае перевірити SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 а потім SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING SUM(prov.quantity)=0 Бо на моїх 100 записах час в межах похибки У Вас точніше буде. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 При ~ 3,5К записів в oc_product_option_value один і другий запит 0,0018с Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 15:16, remix8080 сказал: Якось так Доречі. У Вас тут має бідкатися БД на те, що немає аліасів. Потрібно якось так: UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) AS per ON pr.product_id = per.product_id SET pr.quantity = 0 WHERE pr.quantity > 0 (додав ще й перевірку на кількість більше 0) Але мені здається цей запит будет довшим за той, що я пропонував раніше. Бо там для IN вибираються виключно ті product_id у яких кількість в oc_product більше 0. В останньому ж запиті кількість записів для обробки значно більша. PS. Ну і в такому вигляді потестуйте чи є різниця між SUM та MAX. То вже мені на майбутнє Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница Вибір товарів, в яких залишок по опціях = 0 Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 откажитесь от IN Используйте JOIN Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 02:53, nogocuHoBuk сказал: Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Брр, не знаю як, але відпрацювало практично моментально. Розбиратися/аналізувати вже буду завтра ) 03.07.2022 в 02:53, nogocuHoBuk сказал: Нарешті можу і в люлю) Як в Петрика П'яточкіна. "Ура, 10 слоненят. Тепер я засну" ))) Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 03:07, chukcha сказал: откажитесь от IN Используйте JOIN Пробував, експериментував - не вийшло ( Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 03:36, remix8080 сказал: Пробував, експериментував - не вийшло ( покажіть спробу Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Доброго дня. 03.07.2022 в 10:37, chukcha сказал: покажіть спробу Якось так UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) ON pr.product_id = prov.product_id SET pr.quantity = 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 меня смущает MAX Зачем он вам если вам нужны опции с quantity 0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Для одного товару з oc_product може бути кілька записів в oc_product_option_value, серед яких не всі quantity=0. Тому через MAX вибираю всі нульові. Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:50, remix8080 сказал: Тому через MAX вибираю всі нульові. Мені здається (я навіть впевнений) що SUM() буде працювати швидше, ніж MAX() SUM(prov.quantity)=0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 (змінено) Думаю, не істотно, оскільки запит з MAX виконується практично моментально. UPD. При великій кількості записів в oc_product_option_value - безперечно. Змінено 3 липня 2022 користувачем remix8080 Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:53, remix8080 сказал: Думаю, не істотно КРщае перевірити SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 а потім SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING SUM(prov.quantity)=0 Бо на моїх 100 записах час в межах похибки У Вас точніше буде. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 При ~ 3,5К записів в oc_product_option_value один і другий запит 0,0018с Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 15:16, remix8080 сказал: Якось так Доречі. У Вас тут має бідкатися БД на те, що немає аліасів. Потрібно якось так: UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) AS per ON pr.product_id = per.product_id SET pr.quantity = 0 WHERE pr.quantity > 0 (додав ще й перевірку на кількість більше 0) Але мені здається цей запит будет довшим за той, що я пропонував раніше. Бо там для IN вибираються виключно ті product_id у яких кількість в oc_product більше 0. В останньому ж запиті кількість записів для обробки значно більша. PS. Ну і в такому вигляді потестуйте чи є різниця між SUM та MAX. То вже мені на майбутнє Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница Вибір товарів, в яких залишок по опціях = 0 Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 02:53, nogocuHoBuk сказал: Знайшов рішення UPDATE `oc_product` pr SET pr.quantity=0 WHERE pr.product_id IN ( SELECT prod_id FROM ( SELECT prov.product_id AS prod_id FROM `oc_product_option_value` prov LEFT JOIN oc_product op ON op.product_id = prov.product_id WHERE op.quantity > 0 GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 ) AS pid ) Брр, не знаю як, але відпрацювало практично моментально. Розбиратися/аналізувати вже буду завтра ) 03.07.2022 в 02:53, nogocuHoBuk сказал: Нарешті можу і в люлю) Як в Петрика П'яточкіна. "Ура, 10 слоненят. Тепер я засну" ))) Надіслати Поділитися на інших сайтах More sharing options...
remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 03.07.2022 в 03:07, chukcha сказал: откажитесь от IN Используйте JOIN Пробував, експериментував - не вийшло ( Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 03:36, remix8080 сказал: Пробував, експериментував - не вийшло ( покажіть спробу Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Доброго дня. 03.07.2022 в 10:37, chukcha сказал: покажіть спробу Якось так UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) ON pr.product_id = prov.product_id SET pr.quantity = 0 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 меня смущает MAX Зачем он вам если вам нужны опции с quantity 0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Для одного товару з oc_product може бути кілька записів в oc_product_option_value, серед яких не всі quantity=0. Тому через MAX вибираю всі нульові. Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:50, remix8080 сказал: Тому через MAX вибираю всі нульові. Мені здається (я навіть впевнений) що SUM() буде працювати швидше, ніж MAX() SUM(prov.quantity)=0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 (змінено) Думаю, не істотно, оскільки запит з MAX виконується практично моментально. UPD. При великій кількості записів в oc_product_option_value - безперечно. Змінено 3 липня 2022 користувачем remix8080 Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:53, remix8080 сказал: Думаю, не істотно КРщае перевірити SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 а потім SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING SUM(prov.quantity)=0 Бо на моїх 100 записах час в межах похибки У Вас точніше буде. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 При ~ 3,5К записів в oc_product_option_value один і другий запит 0,0018с Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 15:16, remix8080 сказал: Якось так Доречі. У Вас тут має бідкатися БД на те, що немає аліасів. Потрібно якось так: UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) AS per ON pr.product_id = per.product_id SET pr.quantity = 0 WHERE pr.quantity > 0 (додав ще й перевірку на кількість більше 0) Але мені здається цей запит будет довшим за той, що я пропонував раніше. Бо там для IN вибираються виключно ті product_id у яких кількість в oc_product більше 0. В останньому ж запиті кількість записів для обробки значно більша. PS. Ну і в такому вигляді потестуйте чи є різниця між SUM та MAX. То вже мені на майбутнє Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница Вибір товарів, в яких залишок по опціях = 0 Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Доброго дня. 03.07.2022 в 10:37, chukcha сказал: покажіть спробу Якось так UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) ON pr.product_id = prov.product_id SET pr.quantity = 0 Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 меня смущает MAX Зачем он вам если вам нужны опции с quantity 0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Для одного товару з oc_product може бути кілька записів в oc_product_option_value, серед яких не всі quantity=0. Тому через MAX вибираю всі нульові. Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:50, remix8080 сказал: Тому через MAX вибираю всі нульові. Мені здається (я навіть впевнений) що SUM() буде працювати швидше, ніж MAX() SUM(prov.quantity)=0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 (змінено) Думаю, не істотно, оскільки запит з MAX виконується практично моментально. UPD. При великій кількості записів в oc_product_option_value - безперечно. Змінено 3 липня 2022 користувачем remix8080 Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:53, remix8080 сказал: Думаю, не істотно КРщае перевірити SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 а потім SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING SUM(prov.quantity)=0 Бо на моїх 100 записах час в межах похибки У Вас точніше буде. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 При ~ 3,5К записів в oc_product_option_value один і другий запит 0,0018с Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 15:16, remix8080 сказал: Якось так Доречі. У Вас тут має бідкатися БД на те, що немає аліасів. Потрібно якось так: UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) AS per ON pr.product_id = per.product_id SET pr.quantity = 0 WHERE pr.quantity > 0 (додав ще й перевірку на кількість більше 0) Але мені здається цей запит будет довшим за той, що я пропонував раніше. Бо там для IN вибираються виключно ті product_id у яких кількість в oc_product більше 0. В останньому ж запиті кількість записів для обробки значно більша. PS. Ну і в такому вигляді потестуйте чи є різниця між SUM та MAX. То вже мені на майбутнє Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница Вибір товарів, в яких залишок по опціях = 0 Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 Для одного товару з oc_product може бути кілька записів в oc_product_option_value, серед яких не всі quantity=0. Тому через MAX вибираю всі нульові. Надіслати Поділитися на інших сайтах More sharing options...
nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:50, remix8080 сказал: Тому через MAX вибираю всі нульові. Мені здається (я навіть впевнений) що SUM() буде працювати швидше, ніж MAX() SUM(prov.quantity)=0 Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 (змінено) Думаю, не істотно, оскільки запит з MAX виконується практично моментально. UPD. При великій кількості записів в oc_product_option_value - безперечно. Змінено 3 липня 2022 користувачем remix8080 Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:53, remix8080 сказал: Думаю, не істотно КРщае перевірити SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 а потім SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING SUM(prov.quantity)=0 Бо на моїх 100 записах час в межах похибки У Вас точніше буде. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 При ~ 3,5К записів в oc_product_option_value один і другий запит 0,0018с Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 15:16, remix8080 сказал: Якось так Доречі. У Вас тут має бідкатися БД на те, що немає аліасів. Потрібно якось так: UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) AS per ON pr.product_id = per.product_id SET pr.quantity = 0 WHERE pr.quantity > 0 (додав ще й перевірку на кількість більше 0) Але мені здається цей запит будет довшим за той, що я пропонував раніше. Бо там для IN вибираються виключно ті product_id у яких кількість в oc_product більше 0. В останньому ж запиті кількість записів для обробки значно більша. PS. Ну і в такому вигляді потестуйте чи є різниця між SUM та MAX. То вже мені на майбутнє Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница Вибір товарів, в яких залишок по опціях = 0
remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 (змінено) Думаю, не істотно, оскільки запит з MAX виконується практично моментально. UPD. При великій кількості записів в oc_product_option_value - безперечно. Змінено 3 липня 2022 користувачем remix8080 Надіслати Поділитися на інших сайтах More sharing options...
nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 16:53, remix8080 сказал: Думаю, не істотно КРщае перевірити SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0 а потім SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING SUM(prov.quantity)=0 Бо на моїх 100 записах час в межах похибки У Вас точніше буде. Надіслати Поділитися на інших сайтах More sharing options... remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 При ~ 3,5К записів в oc_product_option_value один і другий запит 0,0018с Надіслати Поділитися на інших сайтах More sharing options... nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 15:16, remix8080 сказал: Якось так Доречі. У Вас тут має бідкатися БД на те, що немає аліасів. Потрібно якось так: UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) AS per ON pr.product_id = per.product_id SET pr.quantity = 0 WHERE pr.quantity > 0 (додав ще й перевірку на кількість більше 0) Але мені здається цей запит будет довшим за той, що я пропонував раніше. Бо там для IN вибираються виключно ті product_id у яких кількість в oc_product більше 0. В останньому ж запиті кількість записів для обробки значно більша. PS. Ну і в такому вигляді потестуйте чи є різниця між SUM та MAX. То вже мені на майбутнє Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
remix8080 Опубліковано: 3 липня 2022 Автор Share Опубліковано: 3 липня 2022 При ~ 3,5К записів в oc_product_option_value один і другий запит 0,0018с Надіслати Поділитися на інших сайтах More sharing options...
nogocuHoBuk Опубліковано: 3 липня 2022 Share Опубліковано: 3 липня 2022 03.07.2022 в 15:16, remix8080 сказал: Якось так Доречі. У Вас тут має бідкатися БД на те, що немає аліасів. Потрібно якось так: UPDATE oc_product pr INNER JOIN (SELECT prov.product_id FROM `oc_product_option_value` prov GROUP BY prov.product_id HAVING MAX(prov.quantity)=0) AS per ON pr.product_id = per.product_id SET pr.quantity = 0 WHERE pr.quantity > 0 (додав ще й перевірку на кількість більше 0) Але мені здається цей запит будет довшим за той, що я пропонував раніше. Бо там для IN вибираються виключно ті product_id у яких кількість в oc_product більше 0. В останньому ж запиті кількість записів для обробки значно більша. PS. Ну і в такому вигляді потестуйте чи є різниця між SUM та MAX. То вже мені на майбутнє Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 Вперед Сторінка 1 з 2 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 2
Recommended Posts