2012-03-01 35 views
9

Magento có thể lọc người dùng dựa trên các sản phẩm họ đã mua không? Ví dụ:Nhận người dùng đã mua sản phẩm này (MAGENTO)

Làm thế nào tôi có thể nhận được tất cả những người dùng đã mua sản phẩm A từ loại B

truy vấn mysql như

người dùng chọn từ người dùng bảng, các sản phẩm bảng ..... Ở ĐÂU dùng đã mua sản phẩm A.

Vui lòng đưa ra một số ý tưởng, tôi cần thiết để thực hiện công việc này. Cảm ơn

Trả lời

13

Nếu bạn muốn một truy vấn thực tế, có lẽ bạn có thể làm điều gì đó đơn giản như (bổ sung thêm tham gia để có được thông tin khách hàng từ EAV):

SELECT DISTINCT o.customer_id FROM sales_flat_order_item i 
INNER JOIN sales_flat_order o ON o.entity_id = i.order_id 
WHERE o.customer_id IS NOT NULL 
AND i.sku = 'some-product-sku' 

Sử dụng mô hình Magento, điều này sẽ làm việc cho bạn:

<?php 

require_once 'app/Mage.php'; 

/* 
* Initialize Magento. Older versions may require Mage::app() instead. 
*/ 
Mage::init(); 

/** 
* Get all unique order IDs for items with a particular SKU. 
*/ 
$orderItems = Mage::getResourceModel('sales/order_item_collection') 
    ->addFieldToFilter('sku', 'some-product-sku') 
    ->toArray(array('order_id')); 

$orderIds = array_unique(array_map(
    function($orderItem) { 
     return $orderItem['order_id']; 
    }, 
    $orderItems['items'] 
)); 

/** 
* Now get all unique customers from the orders of these items. 
*/ 
$orderCollection = Mage::getResourceModel('sales/order_collection') 
    ->addFieldToFilter('entity_id', array('in' => $orderIds)) 
    ->addFieldToFilter('customer_id', array('neq' => 'NULL')); 
$orderCollection->getSelect()->group('customer_id'); 

/** 
* Now get a customer collection for those customers. 
*/ 
$customerCollection = Mage::getModel('customer/customer')->getCollection() 
    ->addFieldToFilter('entity_id', array('in' => $orderCollection->getColumnValues('customer_id'))); 

/** 
* Traverse the customers like any other collection. 
*/ 
foreach ($customerCollection as $customer) { 
    var_dump($customer->getData()); 
} 

Mặc dù khá xấu xí (instantiates nhiều mô hình, thực hiện một loạt các truy vấn dưới bìa), bạn có thể viết mô hình của riêng bạn để làm cho điều này trở nên đẹp hơn.

+0

Cảm ơn rất nhiều, tôi sẽ làm điều đó nhưng dường như tất cả hoàn hảo để làm việc. Và có trang web nào mà tôi có thể tìm thấy tất cả các bảng hay không. Ý tôi là vai trò của mỗi bảng là gì. – RIK

0

Bạn phải căn cứ truy vấn của mình trên đơn đặt hàng. Nếu bạn muốn làm điều đó bằng cách truy vấn SQL, bạn phải nó bằng bảng sau:

  • sales_flat_quote, sales_flat_order_item để có được mối liên hệ giữa khách hàng và sản phẩm
  • catalog_category_product để có được mối liên hệ giữa thể loại và sản phẩm
  • catalog_product_entity để có được id sản phẩm trong chức năng của sku
  • ...

Chúc may mắn

0

thử các mô hình này

$orders = Mage::getModel('sales/order')->addAttributeToSelect('*')->getCollection(); 

$order_items = Mage::getResourceModel('sales/order_item_collection') 
->addAttributeToSelect('sku') 
->addAttributeToSelect('created_at') 
->addAttributeToSelect('order_id') 
->addAttributeToFilter('order_id', array('in' => $orders_ids))->load(); 
Các vấn đề liên quan