如何使用mysql拉出所有产品id,skus,产品名称,magento中的描述?

时间:2014-04-28 09:46:50

标签: mysql magento

我将如何使用Magento数据库中的mysql提取所有产品或skus,产品名称(标题)和描述?我使用了以下查询并获得了除产品名称之外的所有属性。

SELECT e.entity_id, e.sku, eav.value AS 'description'
FROM catalog_product_entity e
JOIN catalog_product_entity_text eav
  ON e.entity_id = eav.entity_id
JOIN eav_attribute ea
  ON eav.attribute_id = ea.attribute_id
WHERE ea.attribute_code = 'description'

5 个答案:

答案 0 :(得分:28)

标题可以从一个商店视图到另一个商店视图不同。同样适用于描述。此外,某些商店视图可以使用后端中设置的默认值。

以下是有关如何获取特定商店视图(ID 1)的所有产品所需数据(sku,名称,描述)的完整查询。

SELECT 
    `e`.`sku`, 
    IF(at_name.value_id > 0, at_name.value, at_name_default.value) AS `name`,
    IF(at_description.value_id > 0, at_description.value, at_description_default.value) AS `description`

FROM 
   `catalog_product_entity` AS `e` 
    INNER JOIN 
         `catalog_product_entity_varchar` AS `at_name_default` 
               ON (`at_name_default`.`entity_id` = `e`.`entity_id`) AND 
                  (`at_name_default`.`attribute_id` = (SELECT attribute_id FROM `eav_attribute` ea LEFT JOIN `eav_entity_type` et ON ea.entity_type_id = et.entity_type_id  WHERE `ea`.`attribute_code` = 'name' AND et.entity_type_code = 'catalog_product')) AND 
                  `at_name_default`.`store_id` = 0 
    LEFT JOIN 
          `catalog_product_entity_varchar` AS `at_name` 
               ON (`at_name`.`entity_id` = `e`.`entity_id`) AND 
                  (`at_name`.`attribute_id` = (SELECT attribute_id FROM `eav_attribute` ea LEFT JOIN `eav_entity_type` et ON ea.entity_type_id = et.entity_type_id  WHERE `ea`.`attribute_code` = 'name' AND et.entity_type_code = 'catalog_product')) AND 
                  (`at_name`.`store_id` = 1) 
    INNER JOIN 
         `catalog_product_entity_text` AS `at_description_default` 
               ON (`at_description_default`.`entity_id` = `e`.`entity_id`) AND 
                  (`at_description_default`.`attribute_id` = (SELECT attribute_id FROM `eav_attribute` ea LEFT JOIN `eav_entity_type` et ON ea.entity_type_id = et.entity_type_id  WHERE `ea`.`attribute_code` = 'description' AND et.entity_type_code = 'catalog_product')) AND 
                  `at_description_default`.`store_id` = 0 
    LEFT JOIN 
          `catalog_product_entity_text` AS `at_description` 
               ON (`at_description`.`entity_id` = `e`.`entity_id`) AND 
                  (`at_description`.`attribute_id` = (SELECT attribute_id FROM `eav_attribute` ea LEFT JOIN `eav_entity_type` et ON ea.entity_type_id = et.entity_type_id  WHERE `ea`.`attribute_code` = 'description' AND et.entity_type_code = 'catalog_product')) AND 
                  (`at_description`.`store_id` = 1) 

如果您希望将其用于其他商店视图,只需将值1替换为以下行所需的ID

(`at_name`.`store_id` = 1) 

(`at_description`.`store_id` = 1)

我不知道你为什么需要这种格式的sql格式。这是一个奇怪的错误来源。您可以通过代码轻松获取它:

$collection = Mage::getResourceModel('catalog/product_collection')
        ->addAttributeToSelect(array('sku', 'name', 'description'));
foreach ($collection as $item) {
    $sku = $item->getSku();
    $name = $item->getName();
    $description = $item->getDescription(); 
    //do something with $sku, $name & $description
}

答案 1 :(得分:11)

以下是显示entity_id, product_name, sku

的另一个查询
SELECT
    catalog_product_entity_varchar.entity_id,
    catalog_product_entity_varchar.`value` AS product_name,
    catalog_product_entity.sku
FROM
    catalog_product_entity_varchar
INNER JOIN catalog_product_entity ON catalog_product_entity_varchar.entity_id = catalog_product_entity.entity_id
WHERE
    catalog_product_entity_varchar.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'
    )
)

答案 2 :(得分:3)

要获取产品名称,请尝试

$sql = "SELECT `value`
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'))";

$results = $readConnection->fetchAll($sql);

答案 3 :(得分:1)

此查询包含产品nameimagepricequantitydescription

SET @etype = (SELECT 
                    entity_type_id
                FROM
                    eav_entity_type
                WHERE
                    entity_type_code = 'catalog_product');

产品name属性ID

SET @name  = (SELECT 
            attribute_id
        FROM
            eav_attribute
        WHERE
            attribute_code = 'name'
                AND entity_type_id = @etype);

产品image属性ID

SET @image  = (SELECT 
            attribute_id
        FROM
            eav_attribute
        WHERE
            attribute_code = 'image'
                AND entity_type_id = @etype);                

产品小图片属性ID

SET @smallimage = (SELECT 
        attribute_id
        FROM 
           eav_attribute
        WHERE 
           attribute_code = 'small_image'
               AND entity_type_id = @etype);

产品price属性ID

SET @price  = (SELECT 
            attribute_id
        FROM
            eav_attribute
        WHERE
            attribute_code = 'price'
                AND entity_type_id = @etype);

产品description属性ID

SET @description  = (SELECT 
            attribute_id
        FROM
            eav_attribute
        WHERE
            attribute_code = 'description'
                AND entity_type_id = @etype);

- 管理员商店ID - SET @store = 0;

SELECT 
    e.entity_id AS 'id',
    e.sku,
    v1.value AS 'name',
    v2.value AS 'image',
    s2.value AS 'small_image',
    si.qty AS 'stock qty',
    d1.value AS 'price',
    s1.value AS 'description'
FROM
    catalog_product_entity e
        LEFT JOIN
    cataloginventory_stock_item si ON e.entity_id = si.product_id
        LEFT JOIN
    catalog_product_entity_varchar v1 ON e.entity_id = v1.entity_id
        AND v1.store_id IN (0,1,2)
        AND v1.attribute_id = @name
        LEFT JOIN
    catalog_product_entity_varchar v2 ON e.entity_id = v2.entity_id
        AND v2.store_id IN (0,1,2)
        AND v2.attribute_id = @image 
        LEFT JOIN        
    catalog_product_entity_varchar s2 ON e.`entity_id` = s2.entity_id
    AND s2.store_id IN (0,1,2)
    AND s2.`attribute_id` = @smallimage
    LEFT JOIN
    catalog_product_entity_decimal d1 ON e.entity_id = d1.entity_id
        AND d1.store_id IN (0,1,2)
        AND d1.attribute_id = @price
        LEFT JOIN
        catalog_product_entity_text s1 ON e.entity_id = s1.entity_id
       AND s1.store_id IN (0,1,2)
       AND s1.attribute_id = @description ;

答案 4 :(得分:1)

以下是简单的方法。

if ping -c 4 google.com ; then echo OK ; else echo KO ; fi