2012-03-01 10 views
9

Magentoでは、購入した製品に基づいてユーザーをフィルタリングすることは可能ですか? たとえば、この製品を購入したユーザーを取得する(MAGENTO)

はどうやって取得することができ、カテゴリBから製品Aを購入したすべてのユーザー

mysqlのクエリユーザーは、製品Aを購入したテーブルのユーザー、テーブルの製品.....から

SELECTユーザーのように。

いくつかのアイデアを与えてください、私はこの作業をする必要がありました。 ありがとう

答えて

13

あなたが実際のクエリをしたい場合(EAVから顧客情報を取得するために参加する追加の追加)のような単純な何かを、あなたはおそらくすることができます

Magentoのモデルを使用して
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' 

を、これはあなたのために働く必要があります。

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

複数のモデルをインスタンス化し、カバーの下で一連のクエリを実行するのはかなり醜いですが、おそらく独自のモデルを作成してこれをもっときれいにすることができます。

+0

おかげでたくさんこれらのモデルを試してみてください、私はそれを行うが、すべての作業に最適と思われるでしょう。そして、私はすべてのテーブルを見つけることができる任意のウェブサイトがあります。私はすべてのテーブルの役割が何であるかのように意味します。 – RIK

0

ご注文に基づいてクエリを実行する必要があります。カテゴリと製品 の間のリンクを取得するためにcatalog_category_product顧客と製品の間

  • リンクを取得するために

    • sales_flat_quote、sales_flat_order_item:あなたはSQLクエリでそれをしたい場合は、以下の表によってそれに持っていますSKU
    • の機能にプロダクトIDを取得する
    • catalog_product_entity ...

    幸運

  • 0

    $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(); 
    
    関連する問題