如何在Magento中找到没有图像的所有产品?

时间:2010-08-25 11:35:25

标签: magento

我有几千种产品,想要找到没有图像的所有产品。我试图在管理产品网格中搜索(无图像),但没有结果。如何创建禁用所有这些产品的SQL查询?

10 个答案:

答案 0 :(得分:15)

不再考虑SQL。开始考虑Magento的模型。 Magento的模型碰巧使用SQL作为后端。可以通过原始SQL查询事物,但Magento的版本会有所不同,并且可能因您使用的后端而异。

从测试控制器操作运行以下命令,或者从其他位置执行Magento代码。它在模型中查询没有图像的产品

//this builds a collection that's analagous to 
//select * from products where image = 'no_selection'
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('image', 'no_selection');

foreach($products as $product)
{
    echo  $product->getSku() . " has no image \n<br />\n";
    //var_dump($product->getData()); //uncomment to see all product attributes
                                     //remove ->addAttributeToFilter('image', 'no_selection');
                                     //from above to see all images and get an idea of
                                     //the things you may query for
}       

答案 1 :(得分:6)

我知道这是超级老,但我发现它很有用,所以我想我会发布更新。

作为上述Alan回答的补充,我发现除了'no_selection'之外还有其他场景......可能是因为插件或系统中的一般错误?最后的nlike实际上会找到所有东西,但我只是为了好玩而离开了其他人。

更改集合查询,如下所示:

$products = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter(array(
        array (
            'attribute' => 'image',
            'like' => 'no_selection'
        ),
        array (
            'attribute' => 'image', // null fields
            'null' => true
        ),
        array (
            'attribute' => 'image', // empty, but not null
            'eq' => ''
        ),
        array (
            'attribute' => 'image', // check for information that doesn't conform to Magento's formatting
            'nlike' => '%/%/%'
        ),
    ));

答案 2 :(得分:2)

我以各种组合尝试了所有这些答案,只返回了我的目录的一小部分。原因是:我最初使用定制的产品图像导入脚本导入了我的产品。

如果我在导入期间没有为某些行指定图像,则脚本不会为这些图像创建NULL或空属性值。它根本就没有创建属性行。

由于addAttributeToFilter默认使用INNER加入,并且没有要加入的图片属性值,因此此处发布的查询并未捕获这些SKU。

以下代码会返回图像,small_image 缩略图为空,格式错误,或行完全缺失的所有产品。

addAttributeToFilter的第三个参数允许您指定与OR语句的WHERE子句一起使用的联接类型。

$products = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter(
        array(
            array(
                'attribute' => 'image',
                'null' => '1'
            ),
            array(
                'attribute' => 'small_image',
                'null' => '1'
            ),
            array(
                'attribute' => 'thumbnail',
                'null' => '1'
            ),
            array(
                'attribute' => 'image',
                'nlike' => '%/%/%'
            ),
            array(
                'attribute' => 'small_image',
                'nlike' => '%/%/%'
            ),
            array(
                'attribute' => 'thumbnail',
                'nlike' => '%/%/%'
            )
        ),
        null,
        'left'
    );

如果像我一样,您希望将其转换为SQL查询以从SQL客户端导出为CSV,则只需从PHP脚本中打印查询:

echo $products->getSelect();

我在StackOverflow上发布了一些SQL,它会对引用attribute_idimagesmall_image属性的thumbnail整数进行硬编码,但这些可以因安装而异。在Magento中,使用ORM查询比使用SQL要好得多。

答案 3 :(得分:1)

另外,要获取查询Alan描述的sql在幕后运行:

echo (string) $products->getSelect();

答案 4 :(得分:1)

您可以使用此SQL来查看哪个产品没有图像:

SELECT * FROM catalog_product_entity_media_gallery RIGHT OUTER JOIN catalog_product_entity ON catalog_product_entity.entity_id = catalog_product_entity_media_gallery.entity_id WHERE catalog_product_entity_media_gallery.value is NULL

祝你好运!

答案 5 :(得分:0)

我写了一篇博客文章,回过头来用sql查询查找丢失的图片。它不会禁用产品,但它至少是一个开始:http://prattski.com/2010/06/29/magento-sql-to-find-missing-images/。从这一点来说应该很容易做到。如果您的属性ID与我的匹配,则可能需要更改属性ID。

答案 6 :(得分:0)

有两种方法可以做:

$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('small_image',array('notnull'=>'','neq'=>'no_selection'));

上面的代码应该可行,但在我的情况下它不起作用。所以我试着跟随:

$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('small_image',array('neq'=>'no_selection'));

祝你好运!

答案 7 :(得分:0)

对于没有小图片的产品试试这个

select * from catalog_product_entity_varchar WHERE attribute_id = 86 AND value = 'no_selection'

在eav_attribute表中找到attribute_id

答案 8 :(得分:0)

我只想补充一点,Sean Michaud的答案是正确的,除非我们不需要使用

array (
        'attribute' => 'image', // null fields
        'null' => true
    ),

使用该页面:http://bytes.com/topic/sql-server/answers/83267-wildcard-doesnt-match-using-like-varchar-field-wierd

  

“NULL值与零长度的字符串相同.NULL   表示没有任何值,SQL标准表示a   NULL值永远不会等于任何其他值,包括另一个NULL“

因此%/%/%不会获得NULL值,但是从上面添加代码我们将修复错误并获取具有NULL值的图像字段。这是结果

$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter(array(
    array (
        'attribute' => 'image', // null fields
        'null' => true
    ),
    array (
        'attribute' => 'image', // check for information that doesn't conform to Magento's formatting
        'nlike' => '%/%/%'
    ),
));

如果您想使用所有图像属性,代码可能就像这样

$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter(array(
        array (
            'attribute' => 'image', //Check for information that doesn't conform to Magento's formatting
            'nlike' => '%/%/%'
        ),
        array (
            'attribute' => 'small_image', //Check for information that doesn't conform to Magento's formatting
            'nlike' => '%/%/%'
        ),
        array (
            'attribute' => 'thumbnail', //Check for information that doesn't conform to Magento's formatting
            'nlike' => '%/%/%'
        ),
        array (
            'attribute' => 'image', //Check for null fields
            'null' => true
        ),
        array (
            'attribute' => 'small_image', //Check for null fields
            'null' => true
        ),
        array (
            'attribute' => 'thumbnail', //Check for null fields
            'null' => true
        ),
));

答案 9 :(得分:0)

我尝试了所有功能,但是当启用平面目录时,这对我有用

$products = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter(
        array(
            array(
                'attribute' => 'image',
                'null' => '1'
            ),
            array(
                'attribute' => 'small_image',
                'null' => '1'
            ),
            array(
                'attribute' => 'thumbnail',
                'null' => '1'
            ),
            array(
                'attribute' => 'image',
                'nlike' => '%/%/%'
            ),
            array(
                'attribute' => 'small_image',
                'nlike' => '%/%/%'
            ),
            array(
                'attribute' => 'thumbnail',
                'nlike' => '%/%/%'
            )
        ),
        null,
        'left'
    );