У меня есть несколько тысяч продуктов и вы хотите найти все продукты без изображения. Я попытался найти (нет изображения) в сетке продуктов admin, но никакого результата. Как я могу сделать SQL-запрос, который отключает все эти продукты?Как я могу найти все продукты без изображений в Magento?
ответ
Я написал статью в блоге немного назад с запросом sql, чтобы найти недостающие изображения. Он не отключает продукты, но он начинается как минимум: http://prattski.com/2010/06/29/magento-sql-to-find-missing-images/. Должно быть довольно легко сделать с этого момента. Возможно, вам придется изменить идентификатор атрибута, если ваш не совпадает с моим.
Остановить мышление в терминах SQL. Начните думать с точки зрения моделей Magento. Модели Magento просто используют SQL как бэкэнд. Запрос на вещи через raw 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
}
Что делать, если вы хотите, чтобы все продукты С изображениями? – swl1020
@ swl1020 Я не тестировал это, но должен работать стандартный не равный фильтр ('neq'). '' -> addAttributeToFilter ('image', array ("neq" => 'no_selection')); Полный список параметров фильтрации доступен в этой статье: http://alanstorm.com/magento_collections –
Коллекции намного лучше, чем отлаживая самообучающиеся инструкции SQL, необходимые для работы с EAV в любой день недели. Работа уже выполнена для вас, вам нужно только обратить внимание на логику, которую вы используете для работы с результатом. –
также, чтобы получить SQL, что запрос Алан описывает пробеги за кадром:
echo (string) $products->getSelect();
Есть оба способа сделать:
$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'));
Удачи!
Я знаю, что это очень старый, но я нашел его полезным, поэтому я решил опубликовать обновление.
В дополнение к ответу Алана выше, я обнаружил, что существуют другие сценарии, чем просто «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' => '%/%/%'
),
));
для продукта без малых изображений попробовать этот
select * from catalog_product_entity_varchar WHERE attribute_id = 86 AND value = 'no_selection'
найти attribute_id в eav_attribute таблицы
Я только хочу добавить, что в ответе Шон Мишо прав, за исключением того, что мы не должны использовать его
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 говорит, что значение а 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
),
));
Я пробовал все эти ответы в различных комбинациях и получал только небольшое подмножество моего каталога. Причина: я первоначально импортировал свои продукты, используя сценарий импорта изображений на заказ.
Если я не указывал изображения для некоторых строк во время импорта, сценарий не создавал 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 для экспорта в CSV из своего клиента SQL, просто напечатать запрос из PHP сценария:
echo $products->getSelect();
Я видел некоторый SQL, размещенный в StackOverflow, который жестко кодирует целые числа attribute_id
, которые ссылаются на атрибуты image
, small_image
и thumbnail
, но они могут отличаться от одной установки к другой. В Magento запрос с ORM намного лучше, чем с SQL.
Я попробовал все, но это работает для меня, когда плоский каталог позволит
$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, чтобы посмотреть, какой продукт не имеет изображения:
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
удачи!
- 1. Magento отключает продукты без изображений
- 2. Фильтровать продукты без изображений в Magento
- 3. Фильтровать продукты без изображений на интерфейсе Magento
- 4. Magento найти сиротские продукты
- 5. Как я могу перестать из Magento возвращать все продукты с поисковыми запросами без чувства?
- 6. Найти похожие продукты в Magento
- 7. Magento Поиск возвращается Все продукты
- 8. Как я могу отобразить все продукты, купленные клиентом в пурпуре?
- 9. Magento PHP: Продукты без родителей
- 10. Magento 1,4 -. Дисплей Все продукты
- 11. Как я могу добавить все полученные продукты?
- 12. Magento: Получать продукты без изображений с помощью коллекций
- 13. C# - Magento: получить все продукты
- 14. magento: сохранить продукты без событий?
- 15. Как найти продукты без upsell в Woocommerce?
- 16. В Magento я не могу загрузить изображение в продукты
- 17. Как я могу найти продукт по своей категории в Magento?
- 18. Как получить все продукты с изображениями в magento
- 19. Magento - «Новые продукты» на домашней странице неправильно отображаются все продукты
- 20. Без рубрики Продукты Запрос
- 21. Как я могу назвать все загруженные продукты на ebay
- 22. Проблемы с загрузкой изображений в существующие продукты Magmi Magento
- 23. Magento - Загрузить все похожие продукты сгруппированного продукта
- 24. Как найти все продукты с некоторыми свойствами?
- 25. Могу ли я импортировать продукты из Magento в магазин Amazon
- 26. Magento EXPORT настраиваемые продукты
- 27. Magento: показать все продукты ниже родительского узла
- 28. Magento: установите «container1» во все существующие продукты
- 29. Как импортировать все продукты другого сайта в сайт magento
- 30. Magento Все продукты с изображениями сначала (list.phtml)
@ Майкл Майерс: Почему именно вы отредактировали это почти целый год после его публикации? –
@ Zéychin: Нет никаких ограничений срока действия для редактирования. Каждый раз, когда вы видите что-то, что может быть улучшено, пожалуйста, не стесняйтесь идти вперед и делать это. В этом случае я был здесь, потому что кто-то отправил не-ответ, который я пришел удалить. –
О да, это справедливо. Я просто вижу: отредактировал ... и по тому, как он помещен, кажется, что вы, видимо, отредактировали вопрос, а не удалили (ложный) ответ! Это имеет смысл. Я приветствую вашу работу для этого сообщества. –