アイテムマスター(製品テーブル)を介して購買活動を販売活動に参加させているためです。結果として、合計に含まれる購入の行数は、販売の行数によって異なります。販売の場合はその逆です。
これらのクエリは、ビューで組み合わせる個別のSQLステートメントとして分離する必要があります。または、SQLを使用UNION ALL
して2つのステートメントを組み合わせることができます。1つは購入用、もう1つは販売用です。
2つのステートメント:
$this->alerts
->select('products.id as productid, products.code as code, products.name, products.price, sum(purchase_items.quantity)')
->from('products');
$this->alerts->join('purchase_items', 'products.id = purchase_items.product_id');
$this->alerts->group_by("products.id");
echo "Total Purchases";
echo $this->alerts->generate();
$this->alerts
->select('products.id as productid, products.code as code, products.name, products.price, sum(sale_items.quantity)')
->from('products');
$this->alerts->join('sale_items', 'products.id = sale_items.product_id');
$this->alerts->group_by("products.id");
echo "Total Sales";
echo $this->alerts->generate();
または、SQLの場合:
$results = $this->db->query('
SELECT products.id as productid, products.code as code, products.name, products.price, ''Purchase'' as transaction, sum(purchase_items.quantity)
FROM products
JOIN purchase_items ON products.id = purchase_items.product_id
GROUP BY products.id
UNION ALL
SELECT products.id as productid, products.code as code, products.name, products.price, ''Sale'' as transaction sum(sales_items.quantity)
FROM products
JOIN sales_items ON products.id = sales_items.product_id
GROUP BY products.id')->result_array();
// Echo $results....
編集:モデルに
何があるのか完全にはわかりませんAlerts
が、改訂されたクエリでは、SQLステートメントを変数に2回割り当てています$products
が、ステートメントを実行していませんか?
また、アラートモデルが拡張されていることを確認してくださいCI_Model
。
より標準的なCodeigniter構文では、次のようにします。
// In Controller, assuming the Alerts model is loaded, and using method chaining.
// Get all sales. By the way, you normally have to group on all columns *not* being aggregated. You might
// get unexpected results by grouping on price, unless the price never changes.
$this->alerts->select('products.id as productid, products.code, products.name, products.price, sum(sale_items.quantity) as quantity')
->from('products')
->join('sale_items', 'products.id = sale_items.product_id')
->group_by('products.id, products.code, products.name, products.price');
$sales = $this->alerts->get()->result_array();
// Get all purchases
$this->alerts->select('products.id as productid, products.code, products.name, products.price, sum(purchase_items.quantity) as quantity')
->from('products')
->join('purchase_items', 'products.id = purchase_items.product_id')
->group_by(products.id, products.code, products.name, products.price);
$purchases = $this->alerts->get()->result_array();
// Put it all together
$products = array_merge($sales, $purchases);
// And now do something with your combined results $products. Send to view, echo etc.