2016-01-13 28 views
-2

我正在從Magento遷移,並且需要mySQL查詢來獲取與每個客戶關聯的所有地址。SQL查詢獲取與Magento中的客戶關聯的所有地址

這是我如何獲取地址ID,但不確定customer_address_entity.parent_id是否是客戶ID。

select 
    email, group_concat(a.entity_id) 
from 
    customer_entity as c 
     inner join 
    customer_address_entity as a ON a.parent_id = c.entity_id 
group by email 

我Magento的數據庫轉儲是從1.6.x版的Magento

你能提出它的查詢?

+0

常見的傢伙,它只是一個查詢。你在說什麼段落? – Kostanos

+0

不錯,所有投票反對的人在magento主題中都是0。我建議Stackowerflow不允許對那些在分配給問題的標籤上沒有信譽的人投反對票。 – Kostanos

回答

1

我找到了。只需檢查數據庫中的entity_id是否與我的示例中相同。

在我的轉儲它們分別是:

city=15, country_id=11, firstname=9, lastname=10, postcode=14, street=16, telephone=17, region=12,region_id=13 

這裏是爲我工作的查詢。

SELECT 
    email, 
    a.entity_id AS addressId, 
    IF(def_billing_address.value = a.entity_id,1,0) AS isDefaultBillingAddress, 
    IF(def_shipping_address.value = a.entity_id,1,0) AS isDefaultSippingAddress, 
    addr_street.value AS street, 
    addr_city.value AS city, 
    addr_region_code.code AS stateCode, 
    addr_region.value AS state, 
    addr_zipcode.value AS postalCode, 
    addr_country.value AS countryCode 

FROM 
    customer_entity AS c 
     INNER JOIN 
    customer_address_entity AS a ON a.parent_id = c.entity_id 

-- DEFAULT BILLING ADDRESS - 7 
-- DEFAULT SHIPPING ADDRESS - 8 
-- city=15, country_id=11, firstname=9, lastname=10, postcode=14, street=16, telephone=17, region=12,region_id=13 
LEFT JOIN customer_entity_int AS def_billing_address ON 
    (def_billing_address.entity_id = c.entity_id) AND 
    (def_billing_address.attribute_id = 7) 
LEFT JOIN customer_entity_int AS def_shipping_address ON 
    (def_shipping_address.entity_id = c.entity_id) AND 
    (def_shipping_address.attribute_id = 8) 
LEFT JOIN customer_address_entity_varchar AS addr_zipcode ON 
    a.entity_id = addr_zipcode.entity_id AND 
    addr_zipcode.attribute_id = 14 
LEFT JOIN customer_address_entity_varchar AS addr_city ON 
    a.entity_id = addr_city.entity_id AND 
    addr_city.attribute_id = 15 
LEFT JOIN customer_address_entity_varchar AS addr_country ON 
    a.entity_id = addr_country.entity_id AND 
    addr_country.attribute_id = 11 
LEFT JOIN customer_address_entity_varchar AS addr_firstname ON 
    a.entity_id = addr_firstname.entity_id AND 
    addr_firstname.attribute_id = 9 
LEFT JOIN customer_address_entity_varchar AS addr_lastname ON 
    a.entity_id = addr_lastname.entity_id AND 
    addr_lastname.attribute_id = 10 
LEFT JOIN customer_address_entity_text AS addr_street ON 
    a.entity_id = addr_street.entity_id AND 
    addr_street.attribute_id = 16 
LEFT JOIN customer_address_entity_varchar AS addr_telephone ON 
    a.entity_id = addr_telephone.entity_id AND 
    addr_telephone.attribute_id = 17 
LEFT JOIN customer_address_entity_varchar AS addr_region ON 
    a.entity_id = addr_region.entity_id AND 
    addr_region.attribute_id = 12 
LEFT JOIN customer_address_entity_int AS addr_region_id ON 
    a.entity_id = addr_region_id.entity_id AND 
    addr_region_id.attribute_id = 13 
LEFT JOIN directory_country_region AS addr_region_code ON 
    addr_region_id.value = addr_region_code.region_id 
1

更好的SQL然後上面..會自動獲取的ID ..只是需要通過實體類型ID,其中1 =客戶的實體類型和2 =客戶地址實體類型..還可以通過代碼找到那些2倍的值了

 $customerTypeID = Mage::getModel('eav/entity')->setType('customer')->getTypeId(); 
     $customerAddressTypeID = Mage::getModel('eav/entity')->setType('customer_address')->getTypeId(); 

及以下SQL

SELECT email, a.entity_id AS addressId, IF(def_billing_address.value = a.entity_id,1,0) AS isDefaultBillingAddress, IF(def_shipping_address.value = a.entity_id,1,0) AS isDefaultSippingAddress, addr_firstname.value AS firstname, addr_lastname.value AS lastname, addr_street.value AS street, addr_city.value AS city, addr_region_code.code AS stateCode, addr_region.value AS state, addr_zipcode.value AS postalCode, addr_country.value AS countryCode, addr_telephone.value AS telephone FROM mg_customer_entity AS c INNER JOIN mg_customer_address_entity AS a ON a.parent_id = c.entity_id

LEFT JOIN mg_customer_entity_int AS def_billing_address ON (def_billing_address.entity_id = c.entity_id) AND (def_billing_address.attribute_id = (SELECT attribute_id FROM mg_eav_attribute AS eav WHERE eav.attribute_code = 'default_billing' and eav.entity_type_id = 1)) LEFT JOIN mg_customer_entity_int AS def_shipping_address ON (def_shipping_address.entity_id = c.entity_id) AND (def_shipping_address.attribute_id = (SELECT attribute_id FROM mg_eav_attribute AS eav WHERE eav.attribute_code = 'default_shipping' and eav.entity_type_id = 1)) LEFT JOIN mg_customer_address_entity_varchar AS addr_zipcode ON a.entity_id = addr_zipcode.entity_id AND addr_zipcode.attribute_id = (SELECT attribute_id FROM mg_eav_attribute AS eav WHERE eav.attribute_code = 'postcode' and eav.entity_type_id = 2) LEFT JOIN mg_customer_address_entity_varchar AS addr_city ON a.entity_id = addr_city.entity_id AND addr_city.attribute_id = (SELECT attribute_id FROM mg_eav_attribute AS eav WHERE eav.attribute_code = 'city' and eav.entity_type_id = 2) LEFT JOIN mg_customer_address_entity_varchar AS addr_country ON a.entity_id = addr_country.entity_id AND addr_country.attribute_id = (SELECT attribute_id FROM mg_eav_attribute AS eav WHERE eav.attribute_code = 'country_id' and eav.entity_type_id = 2) LEFT JOIN mg_customer_address_entity_varchar AS addr_firstname ON a.entity_id = addr_firstname.entity_id AND addr_firstname.attribute_id = (SELECT attribute_id FROM mg_eav_attribute AS eav WHERE eav.attribute_code = 'firstname' and eav.entity_type_id = 2) LEFT JOIN mg_customer_address_entity_varchar AS addr_lastname ON a.entity_id = addr_lastname.entity_id AND addr_lastname.attribute_id = (SELECT attribute_id FROM mg_eav_attribute AS eav WHERE eav.attribute_code = 'lastname' and eav.entity_type_id = 2) LEFT JOIN mg_customer_address_entity_text AS addr_street ON a.entity_id = addr_street.entity_id AND addr_street.attribute_id = (SELECT attribute_id FROM mg_eav_attribute AS eav WHERE eav.attribute_code = 'street' and eav.entity_type_id = 2) LEFT JOIN mg_customer_address_entity_varchar AS addr_telephone ON a.entity_id = addr_telephone.entity_id AND addr_telephone.attribute_id = (SELECT attribute_id FROM mg_eav_attribute AS eav WHERE eav.attribute_code = 'telephone' and eav.entity_type_id = 2) LEFT JOIN mg_customer_address_entity_varchar AS addr_region ON a.entity_id = addr_region.entity_id AND addr_region.attribute_id = (SELECT attribute_id FROM mg_eav_attribute AS eav WHERE eav.attribute_code = 'region' and eav.entity_type_id = 2) LEFT JOIN mg_customer_address_entity_int AS addr_region_id ON a.entity_id = addr_region_id.entity_id AND addr_region_id.attribute_id = (SELECT attribute_id FROM mg_eav_attribute AS eav WHERE eav.attribute_code = 'region_id' and eav.entity_type_id = 2) LEFT JOIN mg_directory_country_region AS addr_region_code ON addr_region_id.value = addr_region_code.region_id

相關問題