Debugging Magento product filter counts
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;
}