SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Сергей Каспирович
  • Группа: Пользователь
  • Сообщений: 32
  • Регистрация: 21.12.2011

27.12.2011 09:25

Здравствуйте.

Возникла следующая проблема:
Авторизованные пользователи на сайте не могут просмотреть страницу товара.
В логах:
SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row";i:1;s:6683:
"#0 /home/artxenia/test.artxenia.com/www/lib/Varien/Db/Statement/Pdo/Mysql.php(115): Zend_Db_Statement_Pdo->_execute(Array)
#1 /home/artxenia/test.artxenia.com/www/lib/Zend/Db/Statement.php(320): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
и тд

Magento 1.6.1.0
Российская сборка 1.22.0

Заранее спасибо.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

27.12.2011 09:57

Вносили ли вы правки в стандартные файлы Magento?

#3 Сергей Каспирович
  • Группа: Пользователь
  • Сообщений: 32
  • Регистрация: 21.12.2011

27.12.2011 10:12

нет, конечно

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

27.12.2011 10:30

После каких действий стал проявляться данный дефект?

#5 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

27.12.2011 10:37

Когда я зашёл в административную часть вашего магазина — я увидел, что система предупреждала вас о том, что расчётные таблицы (индексы) устарели.
После их обновления сбой больше вроде не проявляется.
На будущее: читайте те предупреждения, которые даёт вам система в административной части и выполняйте рекомендации системы.

#6 Сергей Каспирович
  • Группа: Пользователь
  • Сообщений: 32
  • Регистрация: 21.12.2011

27.12.2011 11:22

Хорошо спасибо ))

#7 Сергей Каспирович
  • Группа: Пользователь
  • Сообщений: 32
  • Регистрация: 21.12.2011

27.12.2011 11:31

К сожалению, проблема осталась
посмотрите, пожалуйста, еще раз

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

#8 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

27.12.2011 11:41

Возможно, причина сбоя — в дефекте ядра или в теме HelloWired.
В стеке вызовов при сбое ни один из файлов Российской сборки не встречается.
Чтобы проверить, не является ли дефектной тема HelloWired, вы можете временно переключиться на стандартную тему и попробовать воспроизвести сбой.
В любом случае, как я заметил, сбой происходит только про первой загрузке карточки товара и проявляется только текстовым сооьбщением в журнале неполадок. На экране вроде никак не проявляется.

#9 Сергей Каспирович
  • Группа: Пользователь
  • Сообщений: 32
  • Регистрация: 21.12.2011

27.12.2011 11:57

в теме modern таже ошибка
ошибка повторяется всегда и не только при первой загрузке
Нужно войти в систему и посмотреть любой товар.
присылаю скрин
А где Вы смотрите журнал неполадок? (/var/log?)

Прикрепленные изображения

  • Прикрепленное изображение: Снимок.png


#10 Сергей Каспирович
  • Группа: Пользователь
  • Сообщений: 32
  • Регистрация: 21.12.2011

27.12.2011 12:47

Методом тыка был найден файл с багом app/code/core/Mage/Catalog/Block/Product/List/Upsell.php метод _prepareData()

В нем в метод addExcludeProductFilter видимо добавляются неверные параметры что приводит к такому запросу:

SELECT `e`.*, `price_index`.`price`, `price_index`.`tax_class_id`, `price_index`.`final_price`, IF(price_index.tier_price IS NOT NULL, LEAST(price_index.min_price, price_index.tier_price), price_index.min_price) AS `minimal_price`, `price_index`.`min_price`, `price_index`.`max_price`, `price_index`.`tier_price`, `cat_index`.`position` AS `cat_index_position`, `links`.`link_id`, `link_attribute_position_int`.`value` AS `position` FROM `catalog_product_entity` AS `e`
INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND price_index.website_id = '1' AND price_index.customer_group_id = '1'
INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id='1' AND cat_index.visibility IN(2, 4) AND cat_index.category_id='2'
INNER JOIN `catalog_product_link` AS `links` ON links.linked_product_id = e.entity_id AND links.link_type_id = 1
LEFT JOIN `catalog_product_link_attribute_int` AS `link_attribute_position_int` ON link_attribute_position_int.link_id = links.link_id AND link_attribute_position_int.product_link_attribute_id = '1' WHERE (e.entity_id NOT IN((SELECT `sales_flat_quote_item`.`product_id` FROM `sales_flat_quote_item` WHERE (quote_id = '12')))) AND (links.product_id = 7) AND (`e`.`entity_id` != '7') ORDER BY `e`.`entity_id` ASC

SELECT `sales_flat_quote_item`.`product_id` FROM `sales_flat_quote_item` WHERE (quote_id = '12') дает больше чем 1 результат

Кто-нибудь знает что лежит в sales_flat_quote_item?

#11 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

27.12.2011 13:23

Посмотрел программный код.
Причиной сбоя является дефект стандартного программного кода Magento Community Edition.
Дефекту подвержены все версии ветки 1.6.
Включил в Российскую сборку заплатку для устранения этого дефекта.
На вашем сайте сборку уже обновил.

#12 motofzr1000
  • Группа: Пользователь
  • Сообщений: 1
  • Регистрация: 17.01.2012

17.01.2012 20:39

Hi,

I'm having the exact same problem on a magento 1.6.1 installation. I've searched the magento forums, and couldn't find an actual solution for this problem. Today I've upgraded to 1.6.2, but the problem is still there. Could you please tell me which file(s) need to be changed to fix this bug?

#13 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

17.01.2012 21:02

Хороший пример того, что некоторые модули и функции Российской сборки Magento уникальны даже для глобального рынка.

Поделиться темой: