Проблема получения товара или очень страшный запрос.

Нашли ошибку ? Пишите в этот раздел

Модератор: core team

Vicos
Специалист
Сообщения: 36
Зарегистрирован: Вт сен 27, 2016 7:09 am

Проблема получения товара или очень страшный запрос.

Сообщение Vicos » Пт ноя 18, 2016 9:48 am

Здравствуйте! Возникла проблема с получением товара и выборкой значений из таблицы {{store_product_attribute_value}}. Имеется множество атрибутов, на данный момент 101, все они checkbox.
При запросе товара мы просто отваливаемся из за сишком большой выборки.
Запрос примерно следующий.

Код: Выделить всё

SELECT `t`.`id` AS `t0_c0`, `t`.`type_id` AS `t0_c1`, `t`.`producer_id` AS `t0_c2`, `t`.`category_id` AS `t0_c3`, `t`.`sku` AS `t0_c4`, `t`.`name` AS `t0_c5`, `t`.`slug` AS `t0_c6`, `t`.`price` AS `t0_c7`, `t`.`discount_price` AS `t0_c8`, `t`.`discount` AS `t0_c9`, `t`.`description` AS `t0_c10`, `t`.`short_description` AS `t0_c11`, `t`.`data` AS `t0_c12`, `t`.`is_special` AS `t0_c13`, `t`.`length` AS `t0_c14`, `t`.`width` AS `t0_c15`, `t`.`height` AS `t0_c16`, `t`.`weight` AS `t0_c17`, `t`.`quantity` AS `t0_c18`, `t`.`in_stock` AS `t0_c19`, `t`.`status` AS `t0_c20`, `t`.`create_time` AS `t0_c21`, `t`.`update_time` AS `t0_c22`, `t`.`meta_title` AS `t0_c23`, `t`.`meta_keywords` AS `t0_c24`, `t`.`meta_description` AS `t0_c25`, `t`.`image` AS `t0_c26`, `t`.`average_price` AS `t0_c27`, `t`.`purchase_price` AS `t0_c28`, `t`.`recommended_price` AS `t0_c29`, `t`.`position` AS `t0_c30`, `t`.`external_id` AS `t0_c31`, `t`.`title` AS `t0_c32`, `t`.`meta_canonical` AS `t0_c33`, `t`.`image_alt` AS `t0_c34`, `t`.`image_title` AS `t0_c35`, `producer`.`id` AS `t1_c0`, `producer`.`name_short` AS `t1_c1`, `producer`.`name` AS `t1_c2`, `producer`.`slug` AS `t1_c3`, `producer`.`image` AS `t1_c4`, `producer`.`short_description` AS `t1_c5`, `producer`.`description` AS `t1_c6`, `producer`.`meta_title` AS `t1_c7`, `producer`.`meta_keywords` AS `t1_c8`, `producer`.`meta_description` AS `t1_c9`, `producer`.`status` AS `t1_c10`, `producer`.`sort` AS `t1_c11`, `type`.`id` AS `t2_c0`, `type`.`name` AS `t2_c1`, `typeAttributes`.`id` AS `t3_c0`, `typeAttributes`.`group_id` AS `t3_c1`, `typeAttributes`.`name` AS `t3_c2`, `typeAttributes`.`title` AS `t3_c3`, `typeAttributes`.`type` AS `t3_c4`, `typeAttributes`.`unit` AS `t3_c5`, `typeAttributes`.`required` AS `t3_c6`, `typeAttributes`.`sort` AS `t3_c7`, `typeAttributes`.`is_filter` AS `t3_c8`, `typeAttributes`.`description` AS `t3_c9`, `group`.`id` AS `t5_c0`, `group`.`name` AS `t5_c1`, `group`.`position` AS `t5_c2`, `images`.`id` AS `t6_c0`, `images`.`product_id` AS `t6_c1`, `images`.`name` AS `t6_c2`, `images`.`title` AS `t6_c3`, `images`.`alt` AS `t6_c4`, `images`.`group_id` AS `t6_c5`, `category`.`id` AS `t7_c0`, `category`.`parent_id` AS `t7_c1`, `category`.`slug` AS `t7_c2`, `category`.`name` AS `t7_c3`, `category`.`image` AS `t7_c4`, `category`.`short_description` AS `t7_c5`, `category`.`description` AS `t7_c6`, `category`.`meta_title` AS `t7_c7`, `category`.`meta_description` AS `t7_c8`, `category`.`meta_keywords` AS `t7_c9`, `category`.`status` AS `t7_c10`, `category`.`sort` AS `t7_c11`, `category`.`external_id` AS `t7_c12`, `category`.`title` AS `t7_c13`, `category`.`meta_canonical` AS `t7_c14`, `category`.`image_alt` AS `t7_c15`, `category`.`image_title` AS `t7_c16`, `variants`.`id` AS `t8_c0`, `variants`.`product_id` AS `t8_c1`, `variants`.`attribute_id` AS `t8_c2`, `variants`.`attribute_value` AS `t8_c3`, `variants`.`amount` AS `t8_c4`, `variants`.`type` AS `t8_c5`, `variants`.`sku` AS `t8_c6`, `variants`.`position` AS `t8_c7`, `attribute`.`id` AS `t9_c0`, `attribute`.`group_id` AS `t9_c1`, `attribute`.`name` AS `t9_c2`, `attribute`.`title` AS `t9_c3`, `attribute`.`type` AS `t9_c4`, `attribute`.`unit` AS `t9_c5`, `attribute`.`required` AS `t9_c6`, `attribute`.`sort` AS `t9_c7`, `attribute`.`is_filter` AS `t9_c8`, `attribute`.`description` AS `t9_c9`, `attributesValues`.`id` AS `t10_c0`, `attributesValues`.`product_id` AS `t10_c1`, `attributesValues`.`attribute_id` AS `t10_c2`, `attributesValues`.`number_value` AS `t10_c3`, `attributesValues`.`string_value` AS `t10_c4`, `attributesValues`.`text_value` AS `t10_c5`, `attributesValues`.`option_value` AS `t10_c6`, `attributesValues`.`create_time` AS `t10_c7`, `attr`.`id` AS `t11_c0`, `attr`.`group_id` AS `t11_c1`, `attr`.`name` AS `t11_c2`, `attr`.`title` AS `t11_c3`, `attr`.`type` AS `t11_c4`, `attr`.`unit` AS `t11_c5`, `attr`.`required` AS `t11_c6`, `attr`.`sort` AS `t11_c7`, `attr`.`is_filter` AS `t11_c8`, `attr`.`description` AS `t11_c9` FROM `yu2pe_store_product` `t` LEFT OUTER JOIN `yu2pe_store_producer` `producer` ON (`t`.`producer_id`=`producer`.`id`) LEFT OUTER JOIN `yu2pe_store_type` `type` ON (`t`.`type_id`=`type`.`id`) LEFT OUTER JOIN `yu2pe_store_type_attribute` `attributeRelation` ON (`attributeRelation`.`type_id`=`type`.`id`) LEFT OUTER JOIN `yu2pe_store_attribute` `typeAttributes` ON (`attributeRelation`.`attribute_id`=`typeAttributes`.`id`) LEFT OUTER JOIN `yu2pe_store_attribute_group` `group` ON (`typeAttributes`.`group_id`=`group`.`id`) LEFT OUTER JOIN `yu2pe_store_product_image` `images` ON (`images`.`product_id`=`t`.`id`) LEFT OUTER JOIN `yu2pe_store_category` `category` ON (`t`.`category_id`=`category`.`id`) LEFT OUTER JOIN `yu2pe_store_product_variant` `variants` ON (`variants`.`product_id`=`t`.`id`) LEFT OUTER JOIN `yu2pe_store_attribute` `attribute` ON (`variants`.`attribute_id`=`attribute`.`id`) LEFT OUTER JOIN `yu2pe_store_product_attribute_value` `attributesValues` ON (`attributesValues`.`product_id`=`t`.`id`) LEFT OUTER JOIN `yu2pe_store_attribute` `attr` ON (`attributesValues`.`attribute_id`=`attr`.`id`) WHERE ((t.status = 1) AND (t.slug = 'parfyumernaya-voda-tango-paloma')) ORDER BY group.position ASC, variants.position ASC

Контроллер ProductController::actionView().
Проблемой является именно огромное количество записей для атрибутов в {{store_product_attribute_value}}, если их уменьшить то завпрос проходит с выборкой 120 столбцов и 2ххх значений.
Собственно проблема явно в запросе. Хотелось бы узнать, он пофиксен в последней версии?
У меня стоит версия актуальная на середин сентября, обновиться не получается, или просто плохо делал. Но всё слетело при попытке.

Аватара пользователя
xoma
Администратор
Сообщения: 1971
Зарегистрирован: Ср авг 22, 2012 8:54 am
Контактная информация:

Re: Проблема получения товара или очень страшный запрос.

Сообщение xoma » Пт ноя 18, 2016 10:01 am

Честно мы не тестировали на каталоге где 101 атрибут, на нашей практике было максимум 20. Работа поиска менялась, но не существенно.
Хотелось бы посмотреть на Ваш каталог и настройки. Сможете кинуть дамп ? Можно в личку.
отследить-посылку.рф - дружит с "Юпи!", следит за посылками!

Vicos
Специалист
Сообщения: 36
Зарегистрирован: Вт сен 27, 2016 7:09 am

Re: Проблема получения товара или очень страшный запрос.

Сообщение Vicos » Пт ноя 18, 2016 10:38 am

Жирное место это

Код: Выделить всё

public function getBySlug(
        $slug,
        array $with = ['producer', 'type.typeAttributes', 'images', 'category', 'variants', 'attributesValues']
    ) {
        return Product::model()->published()->with($with)->find('t.slug = :slug', [':slug' => $slug]);
    }

store/components/repository/Productrepository.php

Vicos
Специалист
Сообщения: 36
Зарегистрирован: Вт сен 27, 2016 7:09 am

Re: Проблема получения товара или очень страшный запрос.

Сообщение Vicos » Пт ноя 18, 2016 10:51 am

Залечил просто.

Код: Выделить всё

return Product::model()->published()->find('t.slug = :slug', [':slug' => $slug]);

Убрал with().

Аватара пользователя
xoma
Администратор
Сообщения: 1971
Зарегистрирован: Ср авг 22, 2012 8:54 am
Контактная информация:

Re: Проблема получения товара или очень страшный запрос.

Сообщение xoma » Пт ноя 18, 2016 11:01 am

Vicos писал(а):Залечил просто.

Код: Выделить всё

return Product::model()->published()->find('t.slug = :slug', [':slug' => $slug]);

Убрал with().



Сколько sql-запросов у вас теперь выполняется при отображении карточки товара?
отследить-посылку.рф - дружит с "Юпи!", следит за посылками!

Vicos
Специалист
Сообщения: 36
Зарегистрирован: Вт сен 27, 2016 7:09 am

Re: Проблема получения товара или очень страшный запрос.

Сообщение Vicos » Пт ноя 18, 2016 11:23 am

6

Аватара пользователя
xoma
Администратор
Сообщения: 1971
Зарегистрирован: Ср авг 22, 2012 8:54 am
Контактная информация:

Re: Проблема получения товара или очень страшный запрос.

Сообщение xoma » Пт ноя 18, 2016 11:41 am

Vicos писал(а):6



А на странице есть обращение к атрибутам, производителю и тд?
отследить-посылку.рф - дружит с "Юпи!", следит за посылками!

Vicos
Специалист
Сообщения: 36
Зарегистрирован: Вт сен 27, 2016 7:09 am

Re: Проблема получения товара или очень страшный запрос.

Сообщение Vicos » Пт ноя 18, 2016 12:01 pm

xoma писал(а):
Vicos писал(а):6



А на странице есть обращение к атрибутам, производителю и тд?

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

Аватара пользователя
xoma
Администратор
Сообщения: 1971
Зарегистрирован: Ср авг 22, 2012 8:54 am
Контактная информация:

Re: Проблема получения товара или очень страшный запрос.

Сообщение xoma » Пт ноя 18, 2016 12:53 pm

Можете показать финальный вид этого метода?
отследить-посылку.рф - дружит с "Юпи!", следит за посылками!

Vicos
Специалист
Сообщения: 36
Зарегистрирован: Вт сен 27, 2016 7:09 am

Re: Проблема получения товара или очень страшный запрос.

Сообщение Vicos » Пт ноя 18, 2016 12:57 pm

xoma писал(а):Можете показать финальный вид этого метода?

Код: Выделить всё

public function getBySlug(
        $slug,
        array $with = []
    ) {
        return Product::model()->published()->find('t.slug = :slug', [':slug' => $slug]);
    }

Vicos
Специалист
Сообщения: 36
Зарегистрирован: Вт сен 27, 2016 7:09 am

Re: Проблема получения товара или очень страшный запрос.

Сообщение Vicos » Чт дек 01, 2016 7:58 am

Добрый день!
Хотел узнать. Придумали ли вы более рациональное решение данной проблемы?

Аватара пользователя
xoma
Администратор
Сообщения: 1971
Зарегистрирован: Ср авг 22, 2012 8:54 am
Контактная информация:

Re: Проблема получения товара или очень страшный запрос.

Сообщение xoma » Пт дек 02, 2016 3:32 pm

Vicos писал(а):Добрый день!
Хотел узнать. Придумали ли вы более рациональное решение данной проблемы?



Пока нет. А что не так с Вашим решением?
отследить-посылку.рф - дружит с "Юпи!", следит за посылками!

Vicos
Специалист
Сообщения: 36
Зарегистрирован: Вт сен 27, 2016 7:09 am

Re: Проблема получения товара или очень страшный запрос.

Сообщение Vicos » Вт дек 06, 2016 5:03 am

xoma писал(а):Пока нет. А что не так с Вашим решением?

Да всё в порядке. Ни каких проблем более не встретил.


Вернуться в «Сообщения об ошибках»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя