2010-12-23 7 views
0

salesitems 관련 모델을 가진 판매 모델이 있습니다. 판매 모델에는 몇 가지 수정 자, 즉 할인이 있습니다. 모든 것이 잘 작동하는 것 같군cakephp/mysql에서 일별 판매 값을 얻으십시오.

var $virtualFields = array(
    'total' => '@vad:=(SELECT COALESCE(SUM(price*quantity), 0) FROM saleitems WHERE saleitems.sale_id = Sale.id)', 
    'paid' => '@pad:=(SELECT COALESCE(SUM(amount), 0) FROM payments WHERE payments.sale_id = Sale.id)', 
    'discountamount' => '@dis:=(SELECT COALESCE(SUM(price*quantity), 0) FROM saleitems WHERE saleitems.sale_id = Sale.id)*(0.01 * Sale.discount)', 
    'saleamount' => '@vad - @dis', 
); 

:

매출 합계를 얻으려면, 내가 이런 짓을했는지. 그러나, 내가보고를하고, 하루에 총 판매량을 얻으려고 할 때, 나는 뇌의 힘의 한계에 맞서 싸웠다. 누군가 이걸 할 수있는 올바른 방법을 가르쳐 줄 수 있습니까? 그냥 PHP에서 그들을 tot해야합니까? 또는 쿼리를 실행합니까? 케이크의 옴으로 이것을 할 수있는 방법이 있습니까?

내가 쿼리 방법을 시도

,

SELECT 
created, 
(@vad:=(SELECT COALESCE(SUM(price*quantity), 0) FROM saleitems WHERE `saleitems`.`sale_id` = `Sale`.`id`)) AS `Sale__total`, 
(@pad:=(SELECT COALESCE(SUM(amount), 0) FROM payments WHERE `payments`.`sale_id` = `Sale`.`id`)) AS `Sale__paid`, 
(@dis:=(SELECT COALESCE(SUM(price*quantity), 0) FROM saleitems WHERE `saleitems`.`sale_id` = `Sale`.`id`)*(0.01 * `Sale`.`discount`)) AS `Sale__discountamount`, 
sum(@vad - @dis) AS `Sale__saleamount` 
FROM `sales` AS `Sale` WHERE `Sale`.`account_id` = 37 GROUP BY DAY(`Sale`.`created`) order by created 

를하지만 나에게주고있다 완전히 잘못된 답변 :(

답변

1

이 쿼리를 실행할 수있는 것입니다 대한 의견

감사 :

SELECT SUM((si.price * si.quantity) * (1 - (0.01 * s.discount))) AS SalesByDay 
FROM sales s JOIN saleitems si ON s.id = si.sale_id 
WHERE s.account_id = 37 
GROUP BY DATE(s.created) 

주 : 당신이 @pad 변수 을 사용하여 어디에서 볼 수 없기 때문에

  • DAY 기능은, 그 달의 날짜를 returnes 아닌 날짜
  • 내가 지불 테이블에 가입하지 않았다
관련 문제