読者です 読者をやめる 読者になる 読者になる

売上集計の職業別集計・会員別集計がシステムエラーで動かない

eccube

システムエラーになって動かない。。。

基本情報管理>パラメータ管理でDEBUG_MODEをtrueに設定してると、
以下のようなエラーメッセージがわーっと出る。

SELECT job, count(*) AS order_count, SUM(total) AS total, trunc(AVG(total)) AS total_average 
FROM dtb_customer AS T1 LEFT JOIN dtb_order AS T2 USING ( customer_id ) 
WHERE  T2.create_date >= '2008/10/18' AND  T2.create_date < date('2008/10/20') AND T2.del_flg = 0 
and T2.status <> 3 GROUP BY job ORDER BY total DESC
DB Error: unknown error

SELECT job, count(*) AS order_count, SUM(total) AS total, trunc(AVG(total)) AS total_average 
FROM dtb_customer AS T1 LEFT JOIN dtb_order AS T2 USING ( customer_id ) 
WHERE  T2.create_date >= '2008/10/18' AND  T2.create_date < date('2008/10/20') AND T2.del_flg = 0 
and T2.status <> 3 GROUP BY job ORDER BY total DESC 
[nativecode=1305 ** FUNCTION eccube_db.trunc does not exist]


MySQLには「trunc」なんて関数ありませんよー、
とのことなので、小数点以下を切り捨てるtrunc関数の処理をtruncate関数で代用して、作ってあげる。


DETERMINISTICか、NOT DETERMINISTICなのかについては下記を参考にさせていただきました。



引数が同じなら結果も同じ場合が DETERMINISTIC であり、 引数が同じでも結果が同じとは限らない場合が NOT DETERMINISTIC のようだ。


mysql> CREATE FUNCTION `trunc`(dbl double) RETURNS int(11) DETERMINISTIC return truncate(dbl,0);


これで売上集計できた。
しかし、EC-CUBEではPostgreSQLが標準だからか、MySQLのEC-CUBEは肩身がせまいなぁ。。。