2016-06-11 2 views
2

次は私のクエリです:Laravel SUM生のクエリではnullを返し

$sales = DB::table('sales') 
     ->leftJoin('category_sales', 'category_sales.sale_id', '=', 'sales.id') 
     ->leftJoin('department_sales', 'department_sales.sale_id', '=', 'sales.id') 
     ->leftJoin('store_configs', 'store_configs.id', '=', 'sales.store_config_id') 
     ->select('sales.date', 
      DB::raw('store_configs.store_dba'), 
      DB::raw('sales.id'), 
      DB::raw('(sales.taxable + sales.non_taxable + category_sales.amount + department_sales.amount) as total_sales'), 
      DB::raw('0.0825*(sales.taxable + category_sales.amount + department_sales.amount) as total_tax')) 
     ->groupBy('date')->orderBy('date', 'desc') 
     ->get(); 

私はcategory_sales and department_salesテーブル上の値を持っているとき、私は右の値を取得します。私はamount value for the sales_id in category_salesテーブルを持っていないと言って、total_salestotal_taxの最終結果はnullです。

私の質問は、データが存在する場合でもフィールドの値をどのように合計しますか? category_sales and department_sales

taxable, non_taxable, and amount' 

ちょうどアイデアdefaults

0への私のテーブル構造を持つ整数であり、department_salesと似ています。

CREATE TABLE `category_sales` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`amount` int(11) NOT NULL DEFAULT '0', 
`category_id` int(10) unsigned DEFAULT NULL, 
`sale_id` int(10) unsigned DEFAULT NULL, 
PRIMARY KEY (`id`), 
KEY `category_sales_category_id_index` (`category_id`), 
KEY `category_sales_sale_id_index` (`sale_id`), 
CONSTRAINT `category_sales_category_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE CASCADE, 
CONSTRAINT `category_sales_sale_id_foreign` FOREIGN KEY (`sale_id`) REFERENCES `sales` (`id`) ON DELETE CASCADE) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
+0

データがない場合はnullの代わりに "0"を表示しますか?あなたの質問にタイプがありますか? – amaksr

+0

フィールドのいずれかが空でも空でもない場合は、値を持つフィールドの合計を取得する必要があります。 – score

答えて

0

あなたはIFNULL()関数にNULL可能フィールドをラップすることができます、このようなもの:

DB::raw('(IFNULL(sales.taxable,0) 
+ IFNULL(sales.non_taxable,0) 
+ IFNULL(category_sales.amount,0) 
+ IFNULL(department_sales.amount,0) 
) as total_sales'), 
DB::raw('0.0825*(IFNULL(sales.taxable,0) 
+ IFNULL(category_sales.amount,0) 
+ IFNULL(department_sales.amount,0)) as total_tax')) 
+0

ありがとう@amaksr。私は前に試みたが、適切な方法でやっていなかった。 – score

+0

あなたの答えは私のステージを動かすことができましたが、私はここで別の質問をスタックオーバーフローで別のステップを踏み出すために泣いている、あなたが時間があれば、私はそれを感謝します。 http://stackoverflow.com/questions/37776675/laravel-query-builder-sum-returns-multiplied-values ありがとうございます、 – score

1

使用IFNULLが0

DB::raw('(IFNULL(sales.taxable,0)+ IFNULL(sales.non_taxable,0) + IFNULL(category_sales.amount,0) + IFNULL(department_sales.amount,0)) as total_sales'), 

にチェックして、convrrtする代わりに、私はあなたがあなたのDBの列構造を変更することをお勧めしますが、ゼロとしてデフォルト値を設定し、null値を許可いけません。

関連する問題