rolling

Тормозит подсчет кол-ва товара в категориях

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

rolling    0

Добрый день!

В последнее время сайт стал заметно подтормаживать. На сайте сбоку висит модуль отражающий список корневых категорий и количество товаров в них (из подкатегорий тоже).

Выяснил, что при загрузке страницы БД получает более 500 запросов вида

SELECT COUNT(DISTINCT p.product_id) AS total
FROM product p
LEFT JOIN product_description pd ON (p.product_id = pd.product_id)
LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id)
WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '410')
или еще более развлетвленные.

Выяснил, что эти цифры выдает функция getTotalProducts() в файле /catalog/model/catalog/product.php И если закоментить текст функции - сайт сразу оживает.

Подскажите, может кто-то уже стыкался с такой проблемой? Может есть более удачные методы подсчета кол-ва товара в категориях?

Буду очень признателен за любую помощь.

Поделиться сообщением


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

Добрый день!

В последнее время сайт стал заметно подтормаживать. На сайте сбоку висит модуль отражающий список корневых категорий и количество товаров в них (из подкатегорий тоже).

Выяснил, что при загрузке страницы БД получает более 500 запросов вида

SELECT COUNT(DISTINCT p.product_id) AS total
FROM product p
LEFT JOIN product_description pd ON (p.product_id = pd.product_id)
LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id)
WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (p2c.category_id = '410')
или еще более развлетвленные.

Выяснил, что эти цифры выдает функция getTotalProducts() в файле /catalog/model/catalog/product.php И если закоментить текст функции - сайт сразу оживает.

Подскажите, может кто-то уже стыкался с такой проблемой? Может есть более удачные методы подсчета кол-ва товара в категориях?

Буду очень признателен за любую помощь.

Можно доработать движок так, чтобы дерево категорий генерировалось при редактировании категорий и при добавлении товаров. А во фронте грузить уже готовый HTML код. Тогда все будет летать. Но переделок понадобится много.

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От Serg9988
      Добрый день. Столкнулся с не стандартной задачей.
      ocStore 2.3 + seopro
       
      И так ТОвар1 выводится в категории Телефоны и Планшеты
      Главная категория указана Телефоны.
      Если я перехожу на товар с категории Планшеты, то на товаре меняется урол сайт/телефоны/товар1 и крошки соответственно точно так же.
      А мне нужно что бы крошки были Главная/планшеты/товар1. 
      Может кто это делал? 
      Не могу сообразить как получить id категории с которой произошел переход на товар.
      Последняя мысль была это запись в куку id категории каждый раз когда перехожу в категорию и потом использовать данную id при формировании крошек на товаре.
      Может есть другое решение?
    • От VladimirV
       
      Доброго времени суток. Хочу вывести минимальную цену в категорию, что то делаю не так, прошу вашей помощи.
      ocStore 2.3.0.2.2
      в catalog>model>catalog>product добавил:
      public function getMinPriceFromCategory($category_id) { $query = $this->db->query("SELECT LEAST(p.price,IFNULL(ps.price, p.price)) min_price FROM `" . DB_PREFIX . "category` c RIGHT JOIN `" . DB_PREFIX . "product_to_category` p2c ON p2c.category_id = c.category_id RIGHT JOIN `" . DB_PREFIX . "product` p ON p2c.product_id = p.product_id LEFT JOIN `" . DB_PREFIX . "product_special` ps ON p.product_id = ps.product_id AND ps.date_end >= NOW() AND ps.date_start <= NOW() WHERE c.category_id = " . (int)$category_id . " AND p.status = 1 AND c.status = 1 ORDER BY min_price LIMIT 0,1 "); if ($query->num_rows) { return $query->row['min_price']; } else { return 0; } } в cotroller>product>category, после  $data['categories'][] = array(   добавил:
      'min_price' => $this->model_catalog_product->getMinPriceFromCategory($result['category_id']), в шаблоне category.tpl:
      <?php echo $min_price; ?> Итог: "Undefined variable: min_price". Понимаю что делаю не правильно, но знаний не хватает, понять где и что делаю не так. Прошу указать что нет так делаю, заранее спасибо.
    • От sv2109

      350.00 руб
      View File


      Option Image Change - Изменение картинки товара в зависимости от опции
      Модуль дает возможность изменять изображение на странице товара в зависимости от выбранной опции для этого товара.
      Для этого в админ панели при создании / редактировании товара к нужным изображениям привязываются определенные опции.
      Модулю для работы необходим vqmod.
      Установка
      1. Скопировать все с папки "upload" в корневую папку вашего магазина. Файлы движка не будут перезаписаны.
      2. Установить модуль в панели управления
      3. При необходимости поменяйте настройки
      Новое в версии 1.1:
      - добавлена возможность выбирать несколько опций для 1 изображения
      - изображение в корзине соответствует выбранным опциям
      Версии движка, на которых тестировался модуль
      - ocStore v1.5.4.1
      - ocStore v1.5.5.1
      - opencart v1.5.6
      но должен работать на всех 1.5.х версиях
      - OpenCart, ocStore 2.0, 2.1, 2.2, 2.3 (для получения этих версий - пишите в ЛС автору или на почту sv2109@gmail.com)
       
      Submitter sv2109 Submitted 03/27/2014 Category Product Options Системные требования Сайт разработчика http://sv2109.com Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.4.1 ocStore 2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1 OpenCart.Pro, ocShop  
    • От sv2109
      Модуль дает возможность изменять изображение на странице товара в зависимости от выбранной опции для этого товара.
      Для этого в админ панели при создании / редактировании товара к нужным изображениям привязываются определенные опции.
      Модулю для работы необходим vqmod.
      Установка
      1. Скопировать все с папки "upload" в корневую папку вашего магазина. Файлы движка не будут перезаписаны.
      2. Установить модуль в панели управления
      3. При необходимости поменяйте настройки
      Новое в версии 1.1:
      - добавлена возможность выбирать несколько опций для 1 изображения
      - изображение в корзине соответствует выбранным опциям
      Версии движка, на которых тестировался модуль
      - ocStore v1.5.4.1
      - ocStore v1.5.5.1
      - opencart v1.5.6
      но должен работать на всех 1.5.х версиях
      - OpenCart, ocStore 2.0, 2.1, 2.2, 2.3 (для получения этих версий - пишите в ЛС автору или на почту sv2109@gmail.com)
       
    • От alexandr12345
      Добрый день! 
      Необходимо в определенную категорию вывести товары, которые состоят в другой категории.
      Данный шаблон лучше реализовать на ID категории.
       
      То есть, для каждой категории на сайте я могу установить персонализированный шаблон и вот для одной категории мне нужно прописать, чтобы в этой категории выводились все товары из категории №5 например.
       
      Знаю, что можно просто добавить все нужные товары в эту категорию и ничего не мудрить с шаблонами, но нужно именно так, чтобы в эту категорию брались товары из другой.
       
      Вот существующий шаблон.
      Айди нужно категории 238.
      <?php $config = $this->registry->get('config'); ?> <?php $id_slider = '111'; ?> <?php echo $header; ?> <ul class="breadcrumb"> <?php foreach ($breadcrumbs as $i=> $breadcrumb) { ?> <li><?php if($i+1<count($breadcrumbs)) { ?><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a> <?php } else { ?><?php echo $breadcrumb['text']; ?><?php } ?></li> <?php } ?> </ul> <?php echo $content_top; ?> <div class="container category-page parket"> <div class="row"><?php echo $column_left; ?> <?php if ($column_left && $column_right) { ?> <?php $class = 'col-sm-6'; ?> <?php } elseif ($column_left || $column_right) { ?> <?php $class = 'col-sm-9'; ?> <?php } else { ?> <?php $class = 'col-sm-12'; ?> <?php } ?> <div id="content" class="<?php echo $class; ?>"> <div class="cattitle"> <h1><?php echo $heading_title; ?></h1> <div class="blocks hidden-xs"> <?php } ?> </div> <?php } ?> </div> </div> <?php if ($products_sub) { ?> <div class="product-grid"> <div class="row flex-container"> <?php foreach ($products_sub as $product_sub) { ?> <div class="col-xs-12 col-sm-25 product-container"> <div class="product-block"> <?php if ($product_sub['thumb']) { ?> <div class="image"> <a href="<?php echo $product_sub['href']; ?>" style="background:transparent; box-shadow:none;"> <img src="<?php echo $product_sub['thumb']; ?>" title="<?php echo $product_sub['name']; ?>" alt="<?php echo $product_sub['name']; ?>" /> <div class="more">Посмотреть все цвета и варианты</div> </a> </div> <?php } ?> <span class="product-name hidden"><?php echo $product_sub['name']; ?></span> <div class="prod-model"> <a href="<?php echo $product_sub['href']; ?>" style="background:transparent; box-shadow:none;"><span class="model"><?php echo $product_sub['model']; ?></span></a> </div> <?php if ($product_sub['price']) { ?> <div class="price"> <span class="button typecatalog modal-raschet">Рассчитать</span> </div> <?php } ?> </div> </div> <?php } ?> </div> </div> <div class="row"> <div class="text-center"><?php echo $pagination; ?></div> </div> <?php } ?> <?php if (!$categories && !$products_sub) { ?> <p><?php echo $text_empty; ?></p> <div class="buttons"> <div class="pull-right"><a href="<?php echo $continue; ?>" class="btn btn-primary"><?php echo $button_continue; ?></a></div> </div> <?php } ?> </div> <div class="clearfix"></div> <?php if ($description) { ?> <div class="description" <?php if ($designer || (isset($inzh_systems_sub) && ($inzh_systems_sub))) echo 'style="text-align: justify; padding: 0 2em 0 1em;"'; ?>> <p><?php echo $description; ?></p> </div> <?php } ?> <?php echo $column_right; ?></div> </div> <?php echo $footer; ?> Я буду очень признателен за помощь!!!
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу