我正在尝试检索产品的集合,其中产品的标题(名称)超过N个字符。 到目前为止,我正在尝试这样做:
$collection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('name');
$collection->getSelect()->where("CHAR_LENGTH(`e.name`) > 70");
它将输出的查询是:
SELECT `e`.* FROM `catalog_product_entity` AS `e` WHERE (CHAR_LENGTH(`e.name`) > 70)
它当前抛出一个错误,因为它不明白名称列实际是什么
Column not found: 1054 Unknown column 'e.name' in 'where clause'
我可以遍历检查char长度的所有产品,但效率不高。我试图找到一个纯粹的MySQL解决方案,而不写出 - >查询(...)。
答案 0 :(得分:0)
基于我自己必须加入的连接,结果有点棘手。我知道我必须运行的SQL,它看起来像这样:
SELECT value, CHAR_LENGTH( value ) AS 'length'
FROM catalog_product_entity_varchar
WHERE entity_type_id = (SELECT entity_type_id FROM eav_entity_type WHERE entity_type_code = 'catalog_product')
AND attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'name' AND entity_type_id = (SELECT entity_type_id FROM eav_entity_type WHERE entity_type_code = 'catalog_product'))
AND CHAR_LENGTH(value) > 70;
magento方式:
//calculate attribute id of title
$attr = Mage::getSingleton("eav/config")->getAttribute('catalog_product', 'entity_type_id')->getEntityTypeId();
$col = Mage::getModel('eav/entity_attribute')
->getCollection()
->addFieldToFilter('attribute_code', 'name')
->addFieldToFilter('entity_type_id', $attr);
$attr_id = $col->getFirstItem()->getAttributeId();
//get products
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->getSelect()
->join( array('cat_varchar'=> 'catalog_product_entity_varchar'), 'cat_varchar.entity_id = e.entity_id', array('cat_varchar.value'))
->where("`cat_varchar`.`attribute_id` = {$attr_id}")
->where("CHAR_LENGTH(`cat_varchar`.`value`) > 70");