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

「[EC-CUBE]売上集計の職業別集計・会員別集計がシステムエラーで動かない」の編集履歴(バックアップ)一覧はこちら

[EC-CUBE]売上集計の職業別集計・会員別集計がシステムエラーで動かない - (2009/05/07 (木) 10:17:35) の最新版との変更点

追加された行は緑色になります。

削除された行は赤色になります。

売上集計機能の職業別、会員別がMySQLの場合、システムエラーになる。 &ref(a02.jpg) 原因はPostgreSQLがデフォルトとして構築されているため、 SQLもポスグレ仕様だから。 基本情報管理>パラメータ管理でDEBUG_MODEをtrueに設定してると、 以下のようなエラーメッセージがわーっと出る。 #highlight(linenumber, php){{ 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日本語の旅 | kahua-web mysql> CREATE FUNCTION `trunc`(dbl double) RETURNS int(11) DETERMINISTIC return truncate(dbl,0); これで売上集計できた。
売上集計機能の職業別、会員別がMySQLの場合、システムエラーになる。 &ref(a01.jpg) &ref(a02.jpg) 原因はPostgreSQLがデフォルトとして構築されているため、 SQLもポスグレ仕様だから。 基本情報管理>パラメータ管理でDEBUG_MODEをtrueに設定してると、 以下のようなエラーメッセージがわーっと出る。 #highlight(linenumber, php){{ 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] }} LC_Page_Admin_Total->lfGetOrderMemberの上記SQLで AVG(total)が問題のようです。 正しくはAVG(total),0とすべき。 これでシステムエラーにならない。 2009.5.19追記 headerが先に送信されて、 グラフ出力の際にWarningが出た。 原因はカスタマイズでタイムアウトしないように、 SC_Batch_Daily.phpのリアルタイム集計メソッドlfRealTimeDailyTotal()の中で SC_Utils_Ex::sfFlush(); を呼び出していたことだった・・・orz 3日間くらいかかってやっとたどり着いた新事実・・・ なので、タイムアウトを防ぐ処理を直にSC_Batch_Daily.phpのlfRealTimeDailyTotal()の最後に以下を書いた。 set_time_limit(0); // 実行時間を制限しない これでタイムアウトもエラーもない。 はぁ。。。よかった・・・ #comment_num(,size=100,noname)

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。