2010-12-23 9 views
0

Ich habe ein Verkaufsmodell, mit einem Salesitems verwandten Modell, das Verkaufsmodell hat einige Modifikatoren, dh Rabatt.Verkaufswerte nach Tag in 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', 
); 

die alle gut zu funktionieren scheint:

Um Verkaufssummen zu bekommen, ich habe dies getan. Jedoch, wenn ich etwas berichte und versuche, den Gesamtumsatz pro Tag zu bekommen, bin ich gegen die Grenze der Gehirnkraft gelaufen. Kann mir jemand den richtigen Weg zeigen, dies zu tun? Soll ich sie einfach in PHP aufspielen? oder eine Abfrage ausführen? Oder gibt es eine Möglichkeit, dies mit Kuchens Orm zu tun?

ich die Abfrage Methode versucht,

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 

Aber das gibt mir völlig falsche Antworten :(

Dank für jede Führung

wird

Antwort

1

Sie diese Abfrage ausführen können:

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) 

Hinweise:

  • Die DAY Funktion, returnes den Tag des Monats, nicht das Datum
  • Ich schließe nicht die Tabelle Zahlungen, da ich sehe nicht, wo Sie die Variable @pad verwenden