我将如何使用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'
答案 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)
此查询包含产品name
,image
,price
,quantity
,description
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