売上集計の職業別集計・会員別集計がシステムエラーで動かない
基本情報管理>パラメータ管理で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は肩身がせまいなぁ。。。