sql >> データベース >  >> RDS >> Mysql

Magentoベストセラーモジュール-構成可能な製品を合計し、それらを追加し直す

    そのサンプルコードを投稿していただきありがとうございます。私はそれを使用して、私たち両方にとってうまくいくはずのソリューションを作成することができました。

    構成可能な製品の売上は正しく合計されていますが、結果には含まれていません。代わりに、子製品が表示されます。私の解決策は、構成可能な製品を含め、catalog_product_super_linkで左結合を行うことでした。 テーブルを作成し、parent_idを持つものをすべて除外します 。行う必要のある変更は次のとおりです。

    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-次の2行を見つけます...

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

    ...そしてそれらを次のように変更します:

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

    私の変更により、2つの新しいオプションのパラメーターが追加されました。どちらもデフォルトでtrue 、既存の機能を壊さないように。

    • $getComplexChildProductsの場合 falseに設定されています 、構成可能な製品のすべての子アイテムが結果から削除されます。
    • $getRemovedProducts 以前に注文した製品(Magentoから削除されたもの)も表示するかどうかを決定します。

    正確な結果を得るには、レポートの統計が最新である必要があることに注意してください。

    お役に立てれば!ご不明な点がございましたら、お気軽にお問い合わせください。



    1. Mysql-マルチテーブルを削除

    2. MySQLステートメントでORを使用することは、括弧の有無でどの程度正確に異なりますか?

    3. IRI Voracity(Total Data Management)の紹介[ビデオ]

    4. SQLclフォーマットオプション(Oracle)