Данные продукта Magento не будут переиндексировать - PullRequest
3 голосов
/ 24 января 2012

У меня проблема с моим индексом продукта без переиндексации, он остается только при обработке. Я вошел и провел переиндексацию через оболочку с помощью indexer.php.

Я получаю ошибку, о которой немного не понимаю, может кто-нибудь мне помочь?

Product Flat Data index process unknown error:
exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`sprayfoa_store`.<result 2 when explaining filename '#sql-66c_ab044'>, CONSTRAINT `FK_CAT_PRD_FLAT_1_ENTT_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `catalog_product_entity`)' in /home/sprayfoa/public_html/store/lib/Zend/Db/Statement/Pdo.php:228
Stack trace:
#0 /home/sprayfoa/public_html/store/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array)
#1 /home/sprayfoa/public_html/store/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#2 /home/sprayfoa/public_html/store/lib/Zend/Db/Statement.php(300): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#3 /home/sprayfoa/public_html/store/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#4 /home/sprayfoa/public_html/store/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('ALTER TABLE `ca...', Array)
#5 /home/sprayfoa/public_html/store/lib/Varien/Db/Adapter/Pdo/Mysql.php(389): Zend_Db_Adapter_Pdo_Abstract->query('ALTER TABLE `ca...', Array)
#6 /home/sprayfoa/public_html/store/lib/Varien/Db/Adapter/Pdo/Mysql.php(327): Varien_Db_Adapter_Pdo_Mysql->query('ALTER TABLE `ca...')
#7 /home/sprayfoa/public_html/store/lib/Varien/Db/Adapter/Pdo/Mysql.php(2548): Varien_Db_Adapter_Pdo_Mysql->raw_query('ALTER TABLE `ca...')
#8 /home/sprayfoa/public_html/store/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php(806): Varien_Db_Adapter_Pdo_Mysql->addForeignKey('FK_CAT_PRD_FLAT...', 'catalog_product...', 'entity_id', 'catalog_product...', 'entity_id', 'CASCADE', 'CASCADE')
#9 /home/sprayfoa/public_html/store/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php(125): Mage_Catalog_Model_Resource_Product_Flat_Indexer->prepareFlatTable(1)
#10 /home/sprayfoa/public_html/store/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php(115): Mage_Catalog_Model_Resource_Product_Flat_Indexer->rebuild('1')
#11 /home/sprayfoa/public_html/store/app/code/core/Mage/Catalog/Model/Product/Flat/Indexer.php(73): Mage_Catalog_Model_Resource_Product_Flat_Indexer->rebuild(NULL)
#12 /home/sprayfoa/public_html/store/app/code/core/Mage/Catalog/Model/Product/Indexer/Flat.php(303): Mage_Catalog_Model_Product_Flat_Indexer->rebuild()
#13 /home/sprayfoa/public_html/store/app/code/core/Mage/Index/Model/Process.php(159): Mage_Catalog_Model_Product_Indexer_Flat->reindexAll()
#14 /home/sprayfoa/public_html/store/app/code/core/Mage/Index/Model/Process.php(187): Mage_Index_Model_Process->reindexAll()
#15 /home/sprayfoa/public_html/store/shell/indexer.php(158): Mage_Index_Model_Process->reindexEverything()
#16 /home/sprayfoa/public_html/store/shell/indexer.php(198): Mage_Shell_Compiler->run()
#17 {main}

Ответы [ 6 ]

10 голосов
/ 24 января 2012

Я нашел способ решить свою проблему.

Используя phpMyAdmin, найдите таблицу catalog_product_flat_1 в вашей базе данных Magento. Затем очистите (обрежьте) эту таблицу, затем с помощью сценария indexer.php в каталоге shell в корне установки Magento переиндексируйте Catalog Search Index через SSH.

Команда должна выглядеть следующим образом, если вы находитесь в каталоге 'shell' php indexer.php --reindex catalogsearch_fulltext

3 голосов
/ 12 октября 2012

Таблица catalog_product_flat _ # представляет собой плоскую таблицу, содержащую данные из таблиц каталога продуктов EAV. Если у вас возникли проблемы с переиндексацией каталога, обрежьте (удалите содержимое) этой таблицы и переиндексируйте ваши данные .

Кажется, что Magento не очищает эту таблицу, когда вы удаляете некоторую информацию.

В моем случае эта таблица была полна старых удаленных продуктов.

Исправлено для меня!

1 голос
/ 04 июля 2013

Эй, у меня была такая же проблема, и ничто не исправило ее. С Mage 1.7 я просто зашел в admin / system / configuration / catalog, затем "frontend", переключил Use Flat Catalog Product на "Yes". Реиндекс сработал. Затем снова переключил его обратно на «нет». Снова переиндексация, все заработало. Надеюсь, это поможет: D

PS: я не знаю, связано ли это, но я обрезал таблицы catalog_product_fat и пустую папку var раньше (ничего не изменилось, пока я не сделал то, что там есть, хотя)

PS 2: проблема изначально возникла после того, как истекло время моего переиндексации.

0 голосов
/ 13 ноября 2017

Исправление этого

Чтобы решить эту проблему, вам необходимо найти поврежденные записи. Это просто. В этом случае вам нужно будет создать запрос для получения пустых регистров:

SELECT a.entity_id FROM catalog_product_flat_2 AS a LEFT JOIN catalog_product_entity AS b ON a.entity_id = b.entity_id WHERE ISNULL(b.entity_id);

Это отобразит поврежденные объекты. Вам нужно только удалить их и это все.

+-----------+
| entity_id |
+-----------+
|     35427 |
|     35428 |
+-----------+
2 rows in set (0.04 sec)

Как пример:

DELETE FROM catalog_product_flat_2 where entity_id = '35427';
0 голосов
/ 07 декабря 2015

Я очистил кэш-память и, к счастью, Reindex работал на меня.

0 голосов
/ 28 мая 2013

У меня была та же проблема, и, поскольку у меня не было доступа к оболочке, я не пытался ее решить до следующей недели.Ошибка заставила меня решить проблему.Я попробовал то, что все сказали, бросил стол и т.д .: это не сработало.Что меня подвело, так это то, что плоский стол создан для ускорения работы магазина.Некоторые, но не все, атрибуты хранятся в плоском столе.Однако все атрибуты, которые имеют «Используется в списке продуктов» = «да», хранятся в таблице.У нас есть много атрибутов (мы используем их для отображения спецификаций наших продуктов), и, по-видимому, они полностью настроены для использования в перечне продуктов.Проблема заключалась в том, что из-за того, что у нас было много разных атрибутов, плоский стол стал бы большим.

Установка всех атрибутов кроме «neccessery» на «no» в «Использовании в списке продуктов» была болезненной, однакоплоский стол был создан без ошибок, через 5 минут после того, как я закончил.Поэтому, прежде чем идти и отбрасывать таблицы и спрашивать у хоста доступ к оболочке и т. Д., Посмотрите, не совершили ли вы ту же ошибку, что и я, когда я впервые настраивал свой магазин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...