Shell Magento产品平面数据将不会重新索引

Shell Magento产品平面数据将不会重新索引,shell,magento,Shell,Magento,我有一个问题,我的产品平面指数没有重新索引,它只停留在处理。我使用indexer.php在shell中运行reindex 我犯了一个我不太明白的错误,有人能帮我吗 Product Flat Data index process unknown error: exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child

我有一个问题,我的产品平面指数没有重新索引,它只停留在处理。我使用indexer.php在shell中运行reindex

我犯了一个我不太明白的错误,有人能帮我吗

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}

我找到了解决自己问题的方法

使用phpMyAdmin在您的Magento数据库中找到
catalog\u product\u flat\u 1
表。然后清空(截断)该表,然后使用Magento安装根目录中的
shell
目录中的indexer.php脚本,通过SSH重新索引
目录搜索索引

一旦进入“shell”目录,命令应该是这样的
php indexer.php——reindex catalogsearch_全文

目录(产品)扁平(产品)(扁平)表是一个扁平表,包含来自EAV产品目录表的数据。 如果对目录重新编制索引有问题,截断该表(删除内容),然后重新编制数据索引

当您删除某些信息时,Magento似乎不会清理该表

在我的例子中,那张表充满了旧的已删除产品


帮我修好了

我也遇到了同样的问题,因为我没有shell访问权限,所以直到下周我才试图解决它。一个错误迫使我解决了这个问题。我试过大家说的话,放下桌子,等等:没用。我的诀窍是: 创建平板是为了加快购物速度。一些(但不是全部)属性存储在平面表中。但是,表中存储了所有“用于产品列表”=“是”的属性。我们有很多属性(我们使用它们来显示我们产品的规格),很明显,它们都设置在产品列表中使用。问题是,因为我们有很多不同的属性,平面表会变得很大


在“Used in Product Listing”(用于产品列表)中将除neccessery属性之外的所有属性设置为“no”(否)是一件痛苦的事情,然而,在我完成之后的5分钟内,创建了一个没有错误的平面表。所以,在你放下桌子并要求你的主机进行shell访问等之前,看看你是否犯了与我当初建立店铺时相同的错误。

嘿,我也有同样的问题,但没有解决它。在Mage1.7中,我只需进入管理员/系统/配置/目录,然后进入“前端”,将使用平面目录产品切换为“是”。Reindex成功了。然后回到那里,把它切换回“否”。再次重新编制索引,它成功了。希望能有帮助:D

PS:我不知道它是否相关,但我确实截断了catalog\u product\u fat表,并清空了var文件夹(直到我做了上面的事情,它才改变任何东西,tho)


PS 2:问题最初发生在我的重新索引超时之后

我刷新了缓存存储,谢天谢地,重新索引为我工作。

解决了这个问题

为了解决此问题,您需要找到损坏的条目。这很容易。在这种情况下,您需要创建一个查询来获取空寄存器:

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);
这将显示损坏的实体。你只需要删除它们 就这些

例如:

DELETE FROM catalog_product_flat_2 where entity_id = '35427';

你是个救生员!
DELETE FROM catalog_product_flat_2 where entity_id = '35427';