データベースを介してMagentoから手動でデータを取得するのは非常に面倒なので、SQLクエリ全体を投稿するつもりはありませんが、正しい方向に進んでいると言えます。この種の結合の数を減らすために、eavテーブルからattribute_idsを取得し、それらを直接使用します。これは、私のクエリが myでのみ機能することを意味します Magentoをインストールしましたが、それは私にとっては問題ではありませんでした。
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');
収量:
+----------------+--------------+--------------+
| 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 |
+----------------+--------------+--------------+
これで、退屈な準備が整いました。属性コードごとに、バックエンドテーブル(catalog_product_entity_$BACKEND_TYPE
)に対して結合します )指定された属性ID。私の場合、これはsku / name / idクエリ(entity_idを使用して結合するため、クエリは実際には製品に対して結合する必要はありません...)を次のように変換します。
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;
最初に必要なすべての結合ができるまで、新しいjoin-statement | where-clause|select-clauseセットを追加し続けます。
とは言うものの、ジョナサンは、Magentoフレームワークを使用してこのデータを管理する方が、データベースを介して手動で管理するよりもはるかに簡単であるというのは正しいことです。一度にロードする必要のある製品が極端に多い場合を除いて(2つの仮定があり、どちらかを減らすために作業できることに注意してください)、フレームワークを使用する方がはるかに堅牢です。
お役に立てば幸いです。
ありがとう、ジョー