2014-04-28 12 views
11

Jak mogę pobrać wszystkie prduct ir, skus, nazwę produktu (tytuły) i desksja za pomocą mysql z bazy danych Magento? Użyłem następującej kwerendy i otrzymałem wszystkie atrybuty oprócz nazw produktów.Jak pobrać cały identyfikator produktu, skus, nazwy produktów, opis w języku magento, używając tylko mysql?

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' 
+1

Należy rozważyć zapewnienie prawidłowego DDL (i/lub sqlfiddle) RAZEM Z ŻĄDANYM ZESPOŁEM WYNIKÓW. – Strawberry

+0

Dzięki. Ale czy możesz tutaj napisać pełny kod?Która tabela zawiera nazwę produktu? – user3580780

+0

@ user3580780. Nie sądzę, że sposób w jaki to robisz jest niezawodny. Istnieje wiele atrybutów w tabeli 'eav_attribute' z tym samym kodem dla różnych encji (" opis "i" nazwa "są dla kategorii i produktów). Jeśli zrobisz to w ten sposób, możesz uzyskać zły warunek łączenia, a nie uzyskasz żadnych wyników. – Marius

Odpowiedz

21

Tytuł może się różnić od widoku jednego sklepu. To samo dotyczy opisu. Ponadto niektóre widoki sklepu mogą korzystać z domyślnych wartości ustawionych w zapleczu.

Oto pełne zapytanie, w jaki sposób uzyskać potrzebne dane (sku, nazwa, opis) dla wszystkich produktów dla określonego widoku sklepu (id 1).

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) 

Jeśli chcesz go do innego widoku sklepu, po prostu zastąpić wartość 1 z żądanym ID w następujących liniach

(`at_name`.`store_id` = 1) 

i

(`at_description`.`store_id` = 1) 

nie wiem dlaczego potrzebujesz tego w formacie sql. To jest dziwne i duże źródło błędów. można łatwo dostać go za pomocą kodu:

$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 
} 
+0

Bardzo dziękuję za odpowiedź. Znam mysql, więc próbuję znaleźć sposób na wygenerowanie sku, tytułu i opisu za pomocą mysql. – user3580780

+0

@ user3580780. Cóż ... powyższe zapytanie powinno wystarczyć. Przetestowałem go na przykładowej bazie danych od Magento i uruchomiłem szwy. – Marius

+0

Tak, zadziałało. Bardzo dziękuję za twoją odpowiedź. – user3580780

3

do pobierania nazwę produktu spróbuj

$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); 
8

Oto kolejna kwerenda pokazać 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' 
    ) 
) 
+0

to nie działa, jeśli masz wartość ustawioną dla nazwy na wartości globalne i inną dla określonego widoku sklepu. Twoje zapytanie nie uwzględnia widoku sklepu. Myślę, że pobiera wszystkie wartości dla wszystkich dostępnych widoków sklepu. – Marius

0

To zapytanie zawiera wyrobów name, image , price, quantity, description

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

wyrobów name atrybut ID

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

wyrobów image atrybut ID

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

wyrobów mały atrybut obrazu ID

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

wyrobów price atrybut id

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

ID produktu description atrybut

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

- Admin sklep 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 ; 
+0

Proszę sformatować kod w swojej odpowiedzi. – Tom

1

Poniżej znajduje się prosty sposób.

select 
sku.entity_id, sku.sku, #get sku and entity 
productName.value, #get name 
description.value #get description 
from 
catalog_product_entity as sku, 
catalog_product_entity_varchar as productName, 
catalog_product_entity_text as description 
where 
productName.attribute_id = 73 
and 
sku.entity_id = productName.entity_id 
and 
description.attribute_id = 75 
and 
sku.entity_id = description.entity_id; 
+0

Dobrze jest wyjaśnić, co robi twój kod, pisząc odpowiedź, a nie tylko publikując kod. – Tavo

Powiązane problemy