【问题标题】:Magento SQL query: Get all simple products that are "not visible individually"Magento SQL 查询:获取所有“单独不可见”的简单产品
【发布时间】:2012-12-13 14:36:56
【问题描述】:

我希望直接在 Magento 数据库上编写一个 SQL 查询,以获取所有具有“单独不可见”可见性属性的简单产品,我相信其值为 1。

有人可以帮忙吗?到目前为止,我发现表中设置了可见性值

catalog_product_entity_int

但无法进一步发展。谢谢

【问题讨论】:

  • 我建议您为此使用产品集合
  • 为什么直接在数据库上sql?

标签: sql magento magento-1.7 entity-attribute-value


【解决方案1】:

在没有 ORM 的情况下这样做的原因有很多,所有这些都可能(或可能不)适用于您的需求(存储过滤器、从正确的表中读取数据等)。至少,您可以使用产品集合对象来构建要运行的查询:

$coll = Mage::getModel('catalog/product')->getCollection();
$coll->addAttributeToFilter('visibility' , Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE);
echo $coll->getSelect();

生成的查询将如下所示:

SELECT `e`.*, IF(at_visibility.value_id > 0, at_visibility.value, at_visibility_default.value) AS `visibility`
FROM `catalog_product_entity` AS `e`
INNER JOIN `catalog_product_entity_int` AS `at_visibility_default`
    ON (`at_visibility_default`.`entity_id` = `e`.`entity_id`)
    AND (`at_visibility_default`.`attribute_id` = '526')
    AND `at_visibility_default`.`store_id` = 0
LEFT JOIN `catalog_product_entity_int` AS `at_visibility` ON (`at_visibility`.`entity_id` = `e`.`entity_id`)
    AND (`at_visibility`.`attribute_id` = '526')
    AND (`at_visibility`.`store_id` = 1)
WHERE (IF(at_visibility.value_id > 0, at_visibility.value, at_visibility_default.value) = '1')

【讨论】:

    【解决方案2】:

    我希望这可能没有经过测试。

    $sql = "SELECT * FROM catalog_product_entity_int WHERE visibility=1";
    $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
    foreach ($connection->fetchAll($sql) as $arraytest) {
        echo $arraytest['name'];
    }
    

    【讨论】:

    • 感谢您的回答,不幸的是,表结构比这更隐蔽,但我会尝试调整 SQL。谢谢
    • 因此我建议使用产品集合而不是编写自定义查询。这也是 magento 的不良做法
    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    相关资源
    最近更新 更多