【问题标题】:Magento: "Cannot reindex."Magento:“无法重新索引。”
【发布时间】:2011-06-14 09:49:51
【问题描述】:

我的“分类产品”索引有问题。它根本不会重新索引。错误开始时我在 1.4 上,现在我在 1.5 上,它仍然存在。

我试过了:

  1. 使用 magento 数据库修复工具修复数据库
  2. 清除 var、所有缓存、锁、会话
  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

【问题讨论】:

    标签: magento indexing reporting


    【解决方案1】:

    这个错误 - 总是 - 表明在索引进程的某个地方抛出了异常。

    要验证,请检查以下文件中的方法“reindexProcessAction”:

    app/code/core/Mage/Index/controllers/Adminhtml/ProcessController.php

    请在第二个 catch 块中回显并死掉 $e->getMessage() 并报告;)

    编辑1:

    关于你的例外,根据谷歌,这 - 可能 - 是由于 PHP 语言环境特定的 floatval 格式...尝试输入:

    setlocale(LC_ALL, 'en_EN'); 
    

    在 index.php 文件的顶部。其他人建议您将 System->Configuration->General->Locale 设置为“English”。

    编辑2:

    这是 1.4.x.x 中的一个错误,如果您想要适当的修复 - 看在上帝的份上,请更新您的安装! :)

    这是核心文件 app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Category/Indexer/Product.php 的一个非常讨厌的补丁

    http://pastebin.com/fWYTsYuX

    它是从 1.5 向后移植的。希望它可以帮助某人。

    【讨论】:

    • 报告! SQLSTATE [21S01]:插入值列表与列列表不匹配:1136 列计数与第 1 行的值计数不匹配
    • 遗憾的是,这并没有解决它。这肯定是一个讨厌的。
    • @Michael Watson:那么我只能建议您启用查询日志记录并查看导致此问题的查询。检查构造该查询的调用堆栈也将非常有帮助。
    • @Michael Watson:您走在正确的轨道上,但不幸的是它缺少查询的部分内容。请在 PDO 适配器中启用查询日志记录并复制它失败的确切查询。
    • @yellottyellott:您可能还需要从 1.6 复制该方法。
    【解决方案2】:

    Magento,有时会很奇怪。尝试关闭 DEVELOPER_MODE(在 .htaccess 或 index.php 中)并重新索引。它对我有帮助。

    【讨论】:

      【解决方案3】:

      检查您是否有任何缺少 SKU 的产品。您可以从“管理产品”中执行此操作,然后单击 SKU 列将空白置于顶部。删除它们或分配 SKU 并查看重新索引器是否有效。

      【讨论】:

      • 嘿,马修。感谢您的回复。实际上有几个产品没有 SKU,所以我对解决方案感到兴奋。但是它并没有解决任何问题,并且错误仍然如上。
      • 该死!这通常会为我解决重新索引问题,但我没有太多的“捆绑”。
      【解决方案4】:

      经过几个小时的努力,我终于找到了解决方案。其实,这是一个非常简单的解决方案:

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

      就是这样。在那之后,我能够索引所有数据,直到现在,其他一切都运行良好。这对我有用。我希望它也对你有用。

      【讨论】:

      • 请注意,除非绝对需要,否则您要小心截断表格。如果引用或依赖该数据,可能会产生有趣的副作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多