sql >> Databasteknik >  >> RDS >> Mysql

Magento BestSeller Module - summera konfigurerbara produkter och lägga till dem igen

Tack för att du postade provkoden! Jag kunde använda den för att skapa en lösning som borde fungera bra för oss båda.

Jag upptäckte att konfigurerbar produktförsäljning summeras korrekt men inte ingår i resultaten; deras barnprodukter dyker upp istället. Min lösning var att inkludera konfigurerbara produkter, gör en vänsteranslutning på catalog_product_super_link tabell och filtrera bort allt som har ett parent_id . Här är ändringarna du behöver göra:

Collection.php:

    public function addOrderedQty($from = '', $to = '', $getComplexProducts=false, $getComplexChildProducts = true, $getRemovedProducts = true)
    {
        $qtyOrderedTableName = $this->getTable('sales/order_item');
        $qtyOrderedFieldName = 'qty_ordered';

        $productIdFieldName = 'product_id';

        if (!$getComplexProducts) {
            $compositeTypeIds = Mage::getSingleton('catalog/product_type')->getCompositeTypes();
            $productTypes = $this->getConnection()->quoteInto(' AND (e.type_id NOT IN (?))', $compositeTypeIds);
        } else {
            $productTypes = '';
        }

        if ($from != '' && $to != '') {
            $dateFilter = " AND `order`.created_at BETWEEN '{$from}' AND '{$to}'";
        } else {
            $dateFilter = "";
        }

        $this->getSelect()->reset()->from(
            array('order_items' => $qtyOrderedTableName),
            array(
                'ordered_qty' => "SUM(order_items.{$qtyOrderedFieldName})",
                'order_items_name' => 'order_items.name'
            )
        );

         $_joinCondition = $this->getConnection()->quoteInto(
                'order.entity_id = order_items.order_id AND order.state<>?', Mage_Sales_Model_Order::STATE_CANCELED
         );
         $_joinCondition .= $dateFilter;
         $this->getSelect()->joinInner(
            array('order' => $this->getTable('sales/order')),
            $_joinCondition,
            array()
         );

         // Add join to get the parent id for configurables
         $this->getSelect()->joinLeft(
             array('cpsl' => $this->getTable('catalog/product_super_link')),
             'cpsl.product_id = order_items.product_id',
             'cpsl.parent_id'
         );

        if(!$getComplexChildProducts)
            $this->getSelect()->having('parent_id IS NULL');

        if($getRemovedProducts)
        {
             $this->getSelect()
                ->joinLeft(array('e' => $this->getProductEntityTableName()),
                    "e.entity_id = order_items.{$productIdFieldName} AND e.entity_type_id = {$this->getProductEntityTypeId()}{$productTypes}")
                ->group('order_items.product_id');
        }
        else
        {
            $this->getSelect()
                ->joinInner(array('e' => $this->getProductEntityTableName()),
                    "e.entity_id = order_items.{$productIdFieldName} AND e.entity_type_id = {$this->getProductEntityTypeId()}{$productTypes}")
                ->group('e.entity_id');
        }


        $this->getSelect()->having('ordered_qty > 0');

        // This line is for debug purposes, in case you'd like to see what the SQL looks like
        // $x = $this->getSelect()->__toString();

        return $this;
    }

List.php - Hitta följande två rader...

$bestsellers->addOrderedQty($startDate, $todayDate, true);
$bestsellers->addOrderedQty('', '', true);

... och ändra dem till:

$bestsellers->addOrderedQty($startDate, $todayDate, true, false, false);
$bestsellers->addOrderedQty('', '', true, false, false);

Mina ändringar lade till två nya valfria parametrar, som båda är true som standard , för att inte bryta befintlig funktionalitet.

  • När $getComplexChildProducts är inställd på false , kommer alla underordnade objekt till den konfigurerbara produkten att tas bort från resultaten.
  • $getRemovedProducts avgör om tidigare beställda produkter (som sedan har raderats från Magento) också ska visas eller inte.

Observera att din rapportstatistik måste vara uppdaterad för att få korrekta resultat.

Hoppas det här hjälper! Kontakta mig om du har några frågor.



  1. Pycharm-fel:Felaktigt konfigurerad

  2. Hur man gör paginering i SQL Server 2008

  3. PHP/MySQL Kritisk sektion

  4. sql left join där du kombinerar högerfältsinstanser till ett enda csv-kolumnresultat