Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Добрый день!

Делаю отдельную страницу сезонных товаров и внутри нее категории в которых есть эти товары .

Написал вот такой запрос:

SELECT c.id, c.parent_id, c.name, c.url, p.id AS a
            FROM s_categories AS c
            LEFT JOIN s_products_categories AS pc
            ON pc.category_id = c.id
            
            LEFT JOIN s_products AS p
            ON p.id = pc.product_id
            
            LEFT JOIN s_variants AS v
            ON v.product_id = pc.product_id
            
            LEFT JOIN s_options AS o
            ON o.product_id = p.id 
                
            WHERE 
            v.stock > 0
            AND o.feature_id = '95'
            AND o.value LIKE '%осень%' OR o.value LIKE '%мульти%'
            
            GROUP BY c.id

Он сейчас выполняется 2 секунды, подскажите пожалуйста, как можно его ускорить?

Изменено пользователем esistema1
Ссылка на сообщение
Поделиться на другие сайты

Ускорить - практически никак. Формально можно 1) переходить на более дорогой тарифный план у хостера, 2) сокращать объем данных в базе. Вряд ли это Вам годится.

Можно изменять запрос.

1. Смотрите в CMS образцы формирования запросов. Например, прием для $filter['in_stock'] в api/Products.php. 

2. Обратить внимание на логику WHERE. Сейчас в результат попадают ВСЕ товары с условием o.value LIKE '%мульти%', в том числе не в наличии. В условиях надежнее скобки ставить...

3. Выбираемое поле  p.id носит довольно случайный характер. Задуматься, нужно ли оно.

4. Возможно, эффективнее будет у категорий создать специальное поле с отметкой о сезонности.  Либо этот же запрос кешировать...

 

 

Ссылка на сообщение
Поделиться на другие сайты

Спасибо за советы, буду экспериментировать.

В WHERE написано  v.stock > 0, т.е. товары которых нет в наличии не попадают в выборку.

Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, esistema1 сказал:

Спасибо за советы, буду экспериментировать.

В WHERE написано  v.stock > 0, т.е. товары которых нет в наличии не попадают в выборку.

OR NULL нужно добавить для товаров с бесконечным складом.

Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, esistema1 сказал:

Спасибо за советы, буду экспериментировать.

В WHERE написано  v.stock > 0, т.е. товары которых нет в наличии не попадают в выборку.

Еще как попадают! Замечание от Noxter-а про возможность stock=NULL - это далеко не исчерпывающая часть логических ошибок запроса, связанных с условием наличия.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...