Debugging Magento product filter counts

23rd Dec, 2014 | magento

A handy place to inject a cheeky "error_log" to show the SQL that fetches the counts shown on product filters:

Mage_CatalogIndex_Model_Resource_Attribute::getCount

public/app/code/core/Mage/CatalogIndex/Model/Resource/Attribute.php:76

public function getCount($attribute, $entitySelect)

    {
        $select = clone $entitySelect;
        $select->reset(Zend_Db_Select::COLUMNS);
        $select->reset(Zend_Db_Select::ORDER);
        $select->reset(Zend_Db_Select::LIMIT_COUNT);
        $select->reset(Zend_Db_Select::LIMIT_OFFSET);

        $fields = array('count'=>'COUNT(index.entity_id)', 'index.value');

        $select->columns($fields)
            ->join(array('index'=>$this->getMainTable()), 'index.entity_id=e.entity_id', array())
            ->where('index.store_id = ?', $this->getStoreId())
            ->where('index.attribute_id = ?', $attribute->getId())
            ->group('index.value');

        $select = $select->__toString();

//        $alias = $this->_getReadAdapter()->quoteTableAs($this->getMainTable(), 'index');

// LOG HERE:

error_log(sprint("%sn%sn", __METHOD__, $select), 3, '/tmp/sql.log');

        $result = $this->_getReadAdapter()->fetchAll($select);

        $counts = array();

        foreach ($result as $row) {
            $counts[$row['value']] = $row['count'];
        }

        return $counts;
    }