2012-03-01 10 views
9

¿Es posible en magento filtrar a los usuarios según los productos que han comprado? Por ej.Obtener usuarios que han comprado este producto (MAGENTO)

¿Cómo puedo obtener todos los usuarios que hayan comprado el producto A de la categoría B

consulta MySQL como

a los usuarios seleccionar los usuarios de mesa, productos de mesa ..... DONDE usuario ha comprado el producto A.

Por favor, dame algunas ideas, necesitaba hacerlo funcionar. Gracias

Respuesta

13

Si desea una consulta real, es probable que pueda hacer algo tan simple como (añadir adicional se suma para obtener información del cliente de 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' 

El uso de modelos de Magento, esto debería funcionar para usted:

<?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()); 
} 

Aunque es bastante feo (crea varios modelos, ejecuta un montón de consultas ocultas), probablemente podría escribir su propio modelo para hacer que esto sea mucho más bonito.

+0

Muchas gracias, voy a hacer eso, pero parece todo perfecto para trabajar. ¿Y hay algún sitio web donde pueda encontrar todas las tablas? Quiero decir, ¿cuál es el papel de cada mesa? – RIK

0

Tienes que basar tu pregunta en los pedidos. Si desea hacerlo por consulta SQL, que tiene a ella por la siguiente tabla:

  • sales_flat_quote, sales_flat_order_item para obtener el enlace entre el cliente y el producto
  • catalog_category_product para obtener el enlace entre la categoría y producto
  • catalog_product_entity para obtener la identificación del producto en función de la SKU
  • ...

Buena suerte

0

tratar estos modelos

$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(); 
Cuestiones relacionadas