2011-06-14 83 views
1

我的“类别产品”索引有问题。它根本不会重新索引。当错误发生时,我在1.4上,现在我在1.5上,它仍然在那里。Magento:“不能重新索引。”

我曾尝试:

  1. 修复与Magento的数据库修复工具
  2. 结算变种,所有的缓存,锁,会话
  3. 确保所有的权限是正确的数据库。
  4. 甩掉我的头发。

无论如何我可以进一步调查这个问题吗?错误日志不记录这个问题,而且我在黑暗中。任何帮助将非常非常感激。

编辑:在回复出错消息后,我得到:报告! SQLSTATE [21S01]:插入值列表与列表列表不匹配:1136列计数与第1行的值计数不匹配。

编辑2:我运行了查询日志并获得以下信息。如果你不介意看看,并看到解决方案想到的话,我会很高兴。它略微超过我的头...

[2011-06-14 12:33:26] SQL: SELECT DISTINCT `catalog_product_bundle_selection`.`parent_product_id` FROM `catalog_product_bundle_selection` WHERE (product_id IN('180')) 
EXCEPTION 
exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1' in /my-domain.com/lib/Zend/Db/Statement/Pdo.php:234 
Stack trace: 
#0 /my-domain.com/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array) 
#1 /my-domain.com/lib/Zend/Db/Adapter/Abstract.php(468): Zend_Db_Statement->execute(Array) 
#2 /my-domain.com/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO cat...', Array) 
#3 /my-domain.com/lib/Varien/Db/Adapter/Pdo/Mysql.php(335): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO cat...', Array) 
#4 /my-domain.com/app/code/core/Mage/Index/Model/Mysql4/Abstract.php(159): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO cat...') 
#5 /my-domain.com/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Category/Indexer/Product.php(522): Mage_Index_Model_Mysql4_Abstract->insertFromSelect('SELECT?  ...', 'catalog_categor...', Array) 
#6 /my-domain.com/app/code/core/Mage/Index/Model/Indexer/Abstract.php(125): Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Indexer_Product->reindexAll() 
#7 /my-domain.com/app/code/core/Mage/Index/Model/Process.php(139): Mage_Index_Model_Indexer_Abstract->reindexAll() 
#8 /my-domain.com/app/code/core/Mage/Index/Model/Process.php(167): Mage_Index_Model_Process->reindexAll() 
#9 /my-domain.com/app/code/core/Mage/Index/controllers/Adminhtml/ProcessController.php(124): Mage_Index_Model_Process->reindexEverything() 
#10 /my-domain.com/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Index_Adminhtml_ProcessController->reindexProcessAction() 
#11 /my-domain.com/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('reindexProcess') 
#12 /my-domain.com/app/code/core/Mage/Core/Controller/Varien/Front.php(177): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http)) 
#13 /my-domain.com/app/code/core/Mage/Core/Model/App.php(304): Mage_Core_Controller_Varien_Front->dispatch() 
#14 /my-domain.com/app/Mage.php(596): Mage_Core_Model_App->run(Array) 
#15 /my-domain.com/index.php(81): Mage::run('', 'store') 
#16 {main} 

编辑3:查询本身!

SQL:

INSERT INTO catalog_category_anc_products_index_idx 
SELECT STRAIGHT_JOIN DISTINCT ca.category_id, cp.product_id 
FROM catalog_category_anc_categs_index_idx AS ca 
    INNER JOIN catalog_category_entity AS ce 
     ON ce.path LIKE ca.path OR ce.entity_id = ca.category_id 
    INNER JOIN catalog_category_product AS cp 
     ON cp.category_id = ce.entity_id 
    INNER JOIN catalog_category_product_index_enbl_idx as pv 
     ON pv.product_id = cp.product_id 

回答

4

此错误-always-表明一个例外是在索引过程中的某处抛出。

要进行验证,在以下文件中检查方法 'reindexProcessAction':

应用程序/代码/核心/法师/索引/控制器/ Adminhtml/ProcessController.php

请回声和模具$ E->的getMessage()在第二个catch块,并报告;)

EDIT1:

在问候你的例外,据谷歌,这-may-是由于PHP语言环境特定的floatval格式...尝试把:

setlocale(LC_ALL, 'en_EN'); 

位于index.php文件的顶部。其他人建议你将System-> Configuration-> General-> Locale设置为'English'。

EDIT2:

这是一个错误的1.4.x.x,如果你想有一个适当的修复 - 在上帝的爱更新您的安装! :)

这里是一个非常讨厌的补丁的核心文件的应用程序/代码/核心/法师/目录/型号/资源/ EAV/Mysql4 /分类/索引/ Product.php

http://pastebin.com/fWYTsYuX

从1.5开始回溯。希望它能帮助别人。

+0

举报! SQLSTATE [21S01]:插入值列表与列表列表不匹配:1136列计数与第1行的值计数不匹配 – 2011-06-14 10:20:06

+0

@Michael Watson:请参阅我的编辑。 – 2011-06-14 10:35:03

+0

不幸的是,这并没有解决它。这当然是一个讨厌的问题。 – 2011-06-14 10:46:38

0

检查您没有任何产品缺少SKU。您可以通过'管理产品'来完成此操作,然后单击SKU列以将空白置顶。删除它们或分配SKU并查看reindexer是否工作。

+0

嘿马修。感谢您的回应。实际上有一些没有SKU的产品,所以我对解决方案感到兴奋。但它没有解决任何问题,并且错误仍然如上,如上所述。 – 2011-06-14 13:04:07

+0

Drat!这通常会为我修复reindex问题,但我没有太多“捆绑”。 – 2011-06-14 13:18:32

1

Magento,有时可能会很奇怪。尝试关闭DEVELOPER_MODE(在.htaccess或index.php中)和reindex。它对我有帮助。

0

挣扎了好几个小时后,我终于找到了解决办法。事实上,这是一个非常简单的解决方案:

  • 备份数据库
  • 打开phpMyAdmin的和truncate(空)表catalog_product_flat_1

就是这样。之后,我可以对所有数据进行索引,直到现在,其他所有工作都完美无缺。这对我有效。我希望它也适用于你。

+0

我的意思是TRUNCATE – Yormann 2012-03-24 04:49:02

+0

就像一个笔记,你要小心截断表,除非它是绝对必需的。如果引用或依赖于该数据,则可能有其他有趣的副作用。 – Peter 2012-10-26 20:18:03