标记聚合数据索引进程未知错误

时间:2016-01-27 22:59:24

标签: php mysql pdo magento-1.9

我似乎在Magento上有索引问题。所有可用的索引索引都很好,除了一个:

  

标记聚合数据

通过以下错误编制索引时,我无法确定问题是什么。

Tag Aggregation Data index process unknown error:
exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'COUNT(tr.customer_id) + MIN(IF(tp.base_popularity IS NOT NULL, tp.base_popularity, 0))' in 'field list'' in /mywebsite-domain/httpd.www/lib/Zend/Db/Statement/Pdo.php:228
Stack trace:
#0 /mywebsite-domain/httpd.www/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array)
#1 /mywebsite-domain/httpd.www/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#2 /mywebsite-domain/httpd.www/app/code/core/Zend/Db/Statement.php(291): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#3 /mywebsite-domain/httpd.www/lib/Zend/Db/Adapter/Abstract.php(480): Zend_Db_Statement->execute(Array)
#4 /mywebsite-domain/httpd.www/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ma...', Array)
#5 /mywebsite-domain/httpd.www/lib/Varien/Db/Adapter/Pdo/Mysql.php(504): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ma...', Array)
#6 /mywebsite-domain/httpd.www/app/code/core/Mage/Tag/Model/Resource/Indexer/Summary.php(233): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `ma...')
#7 /mywebsite-domain/httpd.www/app/code/core/Mage/Tag/Model/Resource/Indexer/Summary.php(135): Mage_Tag_Model_Resource_Indexer_Summary->aggregate()
#8 /mywebsite-domain/httpd.www/app/code/core/Mage/Index/Model/Indexer/Abstract.php(143): Mage_Tag_Model_Resource_Indexer_Summary->reindexAll()
#9 /mywebsite-domain/httpd.www/app/code/core/Mage/Index/Model/Process.php(210): Mage_Index_Model_Indexer_Abstract->reindexAll()
#10 /mywebsite-domain/httpd.www/app/code/core/Mage/Index/Model/Process.php(258): Mage_Index_Model_Process->reindexAll()
#11 /mywebsite-domain/httpd.www/shell/indexer.php(168): Mage_Index_Model_Process->reindexEverything()
#12 /mywebsite-domain/httpd.www/shell/indexer.php(216): Mage_Shell_Compiler->run()
#13 {main}

Next exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'COUNT(tr.customer_id) + MIN(IF(tp.base_popularity IS NOT NULL, tp.base_popularity, 0))' in 'field list', query was: INSERT INTO `magentotag_summary` (`tag_id`, `store_id`, `customers`, `products`, `popularity`, `uses`, `historical_uses`, `base_popularity`) SELECT `tr`.`tag_id`, `tr`.`store_id`, COUNT(DISTINCT tr.customer_id) AS `customers`, COUNT(DISTINCT tr.product_id) AS `products`, `COUNT(tr.customer_id) + MIN(IF(tp.base_popularity IS NOT NULL, tp`.`base_popularity, 0))` AS `popularity`, 0 AS `uses`, 0 AS `historical_uses`, 0 AS `base_popularity` FROM `magentotag_relation` AS `tr`
 INNER JOIN `magentocore_store` AS `cs` ON cs.store_id = tr.store_id
 INNER JOIN `magentocatalog_product_website` AS `pw` ON cs.website_id = pw.website_id AND tr.product_id = pw.product_id
 INNER JOIN `magentocatalog_product_entity` AS `e` ON tr.product_id = e.entity_id
 LEFT JOIN `magentotag_properties` AS `tp` ON tp.tag_id = tr.tag_id AND tp.store_id = tr.store_id
 INNER JOIN `magentocatalog_product_entity_int` AS `tad_status` ON tad_status.entity_id = e.entity_id AND tad_status.attribute_id = 273 AND tad_status.store_id = 0
 LEFT JOIN `magentocatalog_product_entity_int` AS `tas_status` ON tas_status.entity_id = e.entity_id AND tas_status.attribute_id = 273 AND tas_status.store_id = cs.store_id
 INNER JOIN `magentocatalog_product_entity_int` AS `tad_visibility` ON tad_visibility.entity_id = e.entity_id AND tad_visibility.attribute_id = 526 AND tad_visibility.store_id = 0
 LEFT JOIN `magentocatalog_product_entity_int` AS `tas_visibility` ON tas_visibility.entity_id = e.entity_id AND tas_visibility.attribute_id = 526 AND tas_visibility.store_id = cs.store_id
 INNER JOIN `magentocataloginventory_stock_status` AS `ciss` ON ciss.product_id = e.entity_id AND ciss.website_id = cs.website_id WHERE (tr.active = 1) AND (IF(IFNULL(tas_status.value_id, -1) > 0, tas_status.value, tad_status.value)=1) AND (IF(IFNULL(tas_visibility.value_id, -1) > 0, tas_visibility.value, tad_visibility.value)!=1) AND (ciss.stock_status = 1) GROUP BY `tr`.`tag_id`,
        `tr`.`store_id` ON DUPLICATE KEY UPDATE `tag_id` = VALUES(`tag_id`), `store_id` = VALUES(`store_id`), `customers` = VALUES(`customers`), `products` = VALUES(`products`), `popularity` = VALUES(`popularity`), `uses` = VALUES(`uses`), `historical_uses` = VALUES(`historical_uses`), `base_popularity` = VALUES(`base_popularity`)' in /mywebsite-domain/httpd.www/lib/Zend/Db/Statement/Pdo.php:235
Stack trace:
#0 /mywebsite-domain/httpd.www/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#1 /mywebsite-domain/httpd.www/app/code/core/Zend/Db/Statement.php(291): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#2 /mywebsite-domain/httpd.www/lib/Zend/Db/Adapter/Abstract.php(480): Zend_Db_Statement->execute(Array)
#3 /mywebsite-domain/httpd.www/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ma...', Array)
#4 /mywebsite-domain/httpd.www/lib/Varien/Db/Adapter/Pdo/Mysql.php(504): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ma...', Array)
#5 /mywebsite-domain/httpd.www/app/code/core/Mage/Tag/Model/Resource/Indexer/Summary.php(233): Varien_Db_Adapter_Pdo_Mysql->query('INSERT INTO `ma...')
#6 /mywebsite-domain/httpd.www/app/code/core/Mage/Tag/Model/Resource/Indexer/Summary.php(135): Mage_Tag_Model_Resource_Indexer_Summary->aggregate()
#7 /mywebsite-domain/httpd.www/app/code/core/Mage/Index/Model/Indexer/Abstract.php(143): Mage_Tag_Model_Resource_Indexer_Summary->reindexAll()
#8 /mywebsite-domain/httpd.www/app/code/core/Mage/Index/Model/Process.php(210): Mage_Index_Model_Indexer_Abstract->reindexAll()
#9 /mywebsite-domain/httpd.www/app/code/core/Mage/Index/Model/Process.php(258): Mage_Index_Model_Process->reindexAll()
#10 /mywebsite-domain/httpd.www/shell/indexer.php(168): Mage_Index_Model_Process->reindexEverything()
#11 /mywebsite-domain/httpd.www/shell/indexer.php(216): Mage_Shell_Compiler->run()
#12 {main}

任何线索?

感谢。

4 个答案:

答案 0 :(得分:4)

插入了错误的反引号,因为Zend_Db_Select-> _tableCols()无法将COUNT(tr.customer_id) + MIN(IF(tp.base_popularity IS NOT NULL, tp.base_popularity, 0))检测为某个SQL函数,然后将其传递给Zend_Db_Expr()。相反,它被检测为[currentCorrelationName]。[col],然后作为普通字符串处理。

解决此问题的方法是放松用于检测SQL函数的正则表达式:

打开lib/Zend/Db/Select.php,找到以下行并删除字符串结束符号($):

const REGEX_COLUMN_EXPR = '/^([\w]*\(([^\(\)]|(?1))*\))$/';

...所以它看起来像这样:

const REGEX_COLUMN_EXPR = '/^([\w]*\(([^\(\)]|(?1))*\))/';

现在,Zend_Db_Select->_tableCols()应该将整个表达式传递给Zend_Db_Expr(),并且SQL错误应该消失。

答案 1 :(得分:0)

我不认为这是索引错误。如果仔细检查QImage语句的select部分,那么你可以看到表达式insert ... select ...COUNT(tr.customer_id) + MIN(IF(tp.base_popularity IS NOT NULL, tp被反引号(`)括起来,这意味着mysql试图解释这个作为列的名称而不是表达式。显然,没有这样的列,因此错误消息。删除此表达式周围的反引号,错误消息将消失。

答案 2 :(得分:0)

我有完全相同的问题。 @Shadow Summary.php中没有反引号

/**
 * Aggregate tags by specified ids
 *
 * @param null|int|array $tagIds
 * @return Mage_Tag_Model_Resource_Indexer_Summary
 */
public function aggregate($tagIds = null)
{
    $writeAdapter = $this->_getWriteAdapter();
    $this->beginTransaction();

    try {
        if (!empty($tagIds)) {
            $writeAdapter->delete(
                $this->getTable('tag/summary'), array('tag_id IN(?)' => $tagIds)
            );
        } else {
            $writeAdapter->delete($this->getTable('tag/summary'));
        }

        $select = $writeAdapter->select()
            ->from(
                array('tr' => $this->getTable('tag/relation')),
                array(
                    'tr.tag_id',
                    'tr.store_id',
                    'customers'         => 'COUNT(DISTINCT tr.customer_id)',
                    'products'          => 'COUNT(DISTINCT tr.product_id)',
                    'popularity'        => 'COUNT(tr.customer_id) + MIN('
                        . $writeAdapter->getCheckSql(
                            'tp.base_popularity IS NOT NULL',
                            'tp.base_popularity',
                            '0'
                            )
                        . ')',
                    'uses'              => new Zend_Db_Expr(0), // deprecated since 1.4.0.1
                    'historical_uses'   => new Zend_Db_Expr(0), // deprecated since 1.4.0.1
                    'base_popularity'   => new Zend_Db_Expr(0)  // deprecated since 1.4.0.1
                )
            )

希望有人能解决这个问题。几乎尝试了一切。

答案 3 :(得分:0)

我最近在客户网站上获得了这个,全新安装,基本上是基础1.9.3.2安装

这是我发现的:

该网站使用composer(当然)来安装一些基础包。

其中一个就是:

colinmollenhour/magento-redis-session": "^2.0"

反过来又加载依赖

- Installing magento/zendframework1 (1.12.16-patch3) Downloading: 100% Extracting archive REASON: colinmollenhour/php-redis-session-abstract v1.3.1 requires magento/zendframework1 ~1.12.0 -> satisfiable by magento/zendframework1[1.12.0, 1.12.1, 1.12.10, 1.12.13, 1.12.16, 1.12.16-patch1, 1.12.16-patch2, 1.12.16-patch3, 1.12.2, 1.12.3, 1.12.4, 1.12.5, 1.12.6, 1.12.7, 1.12.8, 1.12.9, 1.12.9-patch1]. 因此,magento / zendframework1的更新已安装到供应商中。此时安装了' magento / zendframework1:1.12.16-patch3'

一旦我删除了删除了zend更新的redis-session composer软件包,就会恢复正常。

Removals: colinmollenhour/magento-redis-session, colinmollenhour/php-redis-session-abstract, magento/zendframework1, colinmollenhour/credis - Removing colinmollenhour/magento-redis-session (2.0.2) - Removing colinmollenhour/php-redis-session-abstract (v1.3.1) - Removing magento/zendframework1 (1.12.16-patch3) - Removing colinmollenhour/credis (1.7)

包安装的composer条目设置为安装版本2.0> 查看软件包发布(https://github.com/colinmollenhour/Cm_RedisSession/releases

v1.12标记为:切换到Magento 2兼容版本之前的最后一个版本。

将作曲家锁定到该版本:"colinmollenhour/magento-redis-session": "1.12"

解决了这个问题,并将redis-session更新保留在magento代码库中。

所以,基本上,问题是redis-session> 1.12与m1不兼容。

相关问题