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

Как более корректно поступить с SQL-запросами?


Recommended Posts

Вопрос к мега-технарям форума :)

 

Есть задача:

 

Удалить значение опции из `oc_product_option_value`, которая по идее идет в паре с записью в `oc_product_option`

 

Мы знаем, что, грубо говоря, есть 2 типа опций.

- А) Простые пишутся только в `oc_product_option` (одно поле, к примеру дата или текст)

- Б) Сложные, имеют варианты значений (много полей, к примеру, несколько размеров кроссовок). Варианты значений дополнительно пишут еще и в `oc_product_option_value`

 

Так вот, я удаляю опцию из `oc_product_option`

А затем хочу удалить из `oc_product_option_value`

Но!

Тут есть 2 варианта как поступить:

- 1. Сначала проверить, а является ли эта опция сложной (запрос на существование вариантов значений `oc_option_value`). И при наличии вариантов, уже удалять эту опцию из `oc_product_option_value`

- 2. Просто выполнить удаление вслепую. Если так выйдет, что опция была простой, - ну подумаешь, будет удалено 0 строк.

 

По скорости потестил:

SELECT `option_value_id` FROM `oc_option_value` WHERE `option_id` = '4'   -- Выполняется 0.0003 с.
DELETE FROM `oc_product_option_value` WHERE `product_id` = '42' AND `option_id` = '4'   -- Выполняется 0.0002 с.

По скорости логично просто удалять вслепую. Тем более, что если конкретная опция окажется сложной, то по результатам 2-ух запросов выйдет уже почти в 2 раза дольше (0,0005). А запросов может быть много и товаров на реальном сайте тоже может быть много. Экономнее делать 1 запрос. Но феншуйно ли так поступать?

 

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

DELETE ov, pov FROM product_option_value pov 
LEFT JOIN option_value ov ON (pov.option_id = ov.option_id) WHERE pov.`product_id` = '42' AND pov.`option_id` = '4'

Если принципиально нужен 1 запрос

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

11 часов назад, SergeTkach сказал:

Спасибо за участие!

Действительно, что-то заморочился чересчур...

)))) 

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

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

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

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

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

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

Вхід

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

Вхід зараз

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

Important Information

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