Получить пользователей, которые купили этот продукт (MAGENTO) - PullRequest
8 голосов
/ 01 марта 2012

Возможно ли в magento фильтровать пользователей по продуктам, которые они купили?Например,

Как я могу получить всех пользователей, которые купили продукт A из категории B

mysql, например

ВЫБРАТЬ пользователей Из пользователей таблиц, из таблиц продуктов ..... ГДЕ пользователь приобрел продукт А.

Пожалуйста, дайте несколько идей, мне нужно было сделать эту работу.Спасибо

Ответы [ 3 ]

13 голосов
/ 01 марта 2012

Если вам нужен реальный запрос, вы, вероятно, можете сделать что-то простое (например, добавьте дополнительные объединения, чтобы получить информацию о клиенте из 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'

Используя модели Magento, это должно работать для вас:

<?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 голосов
/ 28 августа 2013

попробуйте эти модели

$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();
0 голосов
/ 01 марта 2012

Вы должны основывать свой запрос на заказах. Если вы хотите сделать это с помощью SQL-запроса, вы должны сделать это по следующей таблице:

  • sales_flat_quote, sales_flat_order_item, чтобы получить связь между клиентом и продуктом
  • catalog_category_product, чтобы получить ссылку между категорией и продуктом
  • catalog_product_entity для получения идентификатора продукта в функции sku
  • ...

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...