sql >> Databasteknik >  >> RDS >> Mysql

Magento-produkter importeras från databasen med SQL-fråga

Jag tänker inte lägga upp hela SQL-frågan eftersom det är alldeles för tråkigt att försöka få ut data från Magento manuellt via databasen, men jag kommer att säga att du är på rätt spår. För att minska antalet joins för den här typen av saker, hämtar jag mina attribute_ids från eav-tabellen och använder dem direkt. Det betyder att min fråga bara kommer att fungera på min installera Magento, men det har inte varit ett problem för mig.

select attribute_code, attribute_id, backend_type from eav_attribute
    where entity_type_id = (select entity_type_id from eav_entity_type where entity_type_code = 'catalog_product')
      and attribute_code in ('name', 'url_path', 'price', 'image', 'description', 'manufacturer');

Avkastning:

+----------------+--------------+--------------+
| attribute_code | attribute_id | backend_type |
+----------------+--------------+--------------+
| description    |           61 | text         |
| image          |           74 | varchar      |
| manufacturer   |           70 | int          |
| name           |           60 | varchar      |
| price          |           64 | decimal      |
| url_path       |           87 | varchar      |
+----------------+--------------+--------------+

Nu är du redo för trötthet! För varje attributkod, gå med i backend-tabellen (catalog_product_entity_$BACKEND_TYPE ) på ditt angivna attribut-ID. För mig skulle detta förvandla en sku/namn/id-fråga (din fråga behöver faktiskt inte gå med i produkter, eftersom du använder entity_id för att göra sammanfogningen...) till:

select p.sku, p.entity_id, n.value name
    from catalog_product_entity p
    join catalog_product_entity_varchar n on n.entity_id = p.entity_id
  where n.attribute_id = 60;

Fortsätt att lägga till nya join-statement|where-clause|select-claus-uppsättningar tills du har alla joins du ville ha ursprungligen.

Som sagt, Jonathan har rätt i att det skulle vara mycket lättare att använda Magento-ramverket för att hantera denna data än att göra det manuellt via databasen. Om du inte har ett extremt antal produkter som du behöver ladda alla på en gång (observera att det finns två antaganden där, och du kan arbeta för att minska båda), skulle det vara mycket mer robust att använda ramverket.

Hoppas det hjälper!

Tack, Joe




  1. Hur ändrar jag SQL Server 2005 till att vara skiftlägeskänslig?

  2. Hur man ställer in schemakollation i MySQL för japanska

  3. MySQL och GROUP_CONCAT() maxlängd

  4. Ställ in inmatningsvärde vid val av alternativ i php