バージョン選択

フォーラム

メニュー

オンライン状況

48 人のユーザが現在オンラインです。 (13 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 48
もっと...

サイト内検索

バグ報告 > 管理機能 > 売り上げ集計の会員別集計と職業別集計でのSQLバグ[eccube2.3.3+mysql]

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
saitoh
投稿日時: 2009/1/28 10:40
対応状況: 解決済
新米
登録日: 2009/1/28
居住地:
投稿: 7
売り上げ集計の会員別集計と職業別集計でのSQLバグ[eccube2.3.3+mysql]
環境:eccube 2.3.3+apache2.2+MySQL 5.0.75+PHP5.2.6+Linux(ubuntu)
状況:会員別集計を実行するとシステムエラーがでる
site.log抜粋:
SELECT COUNT(*) AS order_count, SUM(total) AS total, TRUNCATEATE((AVG(total)) AS total_average, order_sex FROM dtb_order WHERE create_date >= '2009/1/1 00:00:00' AND create_date < date('2009/02/01') AND customer_id <> 0 AND del_flg = 0 AND status <> 3 GROUP BY order_sex [nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'total_average, order_sex FROM dtb_order WHERE create_date >= '2009/1/1 00:00:00' at line 1]

原因:TRUNCATEATE((AVG(total))となっており構文エラー 正しくは→TRUNCATE(AVG(total),0)
class[SC_DB_DBFactory_MYSQL]のメソッド[sfChangeMySQL]をSQL発行までに2重呼び出し(SC_Query->select内とSC_DbConn->getAll内)している
さらに、TRANCATE関数の第2引数[桁数(精度)]の指定が無い

対応方法:
SC_Query->selectの94行目削除
// $sqlse = $dbFactory->sfChangeMySQL($sqlse);

LC_Page_Admin_Total->lfGetOrderMemberの641行目
trunc(AVG(total))→trunc(AVG(total),0)に変更

※職業別集計もバグっていたので下記の通り変更しました (2009/1/28 12:00 更新)
LC_Page_Admin_Total->lfGetOrderMemberの711行目
trunc(AVG(total))→trunc(AVG(total),0)に変更

※念のため記述しておきますが、当方公式サイトの開発環境ソースのコミット権はありませんので、公式サイトの開発環境ソースの変更はしていません。
上記の変更箇所は当方開発環境内の話です
ただし、公式サイトの2.3.3のソースであれば、上記と同様の変更で対応可能です
上記の変更で当方開発中のサイトは間に合いますが、
根本的にclass[SC_DB_DBFactory_MYSQL]の[sfChangeTrunc]と[sfChangeRANDOM]を再入可能に変更すべきかと思います
例えば、SC_DB_DBFactory_MYSQLの246行目でeregi_replace関数の正規表現を
$changesql = eregi_replace("( TRUNC)", " TRUNCATE", $sql);
から
$changesql = eregi_replace("( TRUNC *\()", " TRUNCATE(", $sql);
のようにするとか。(上記は不完全でTRUNCの前に四則演算子等が来るとヒットしません)
SQL文は将来において、おおいに変更される箇所なので、
内部の処理を知らないとSQLが書けないことに問題があると思います
(2009/1/28 20:30 更新)
nets
投稿日時: 2009/2/28 18:03
対応状況: −−−
新米
登録日: 2008/7/31
居住地: 広島
投稿: 10
Re: 売り上げ集計の会員別集計と職業別集計でのSQLバグ[eccube2.3.3+mysql]
私も同じエラーで困っていました。
saitoh様ありがとうございます。
助かりました。そこで、この対処をした後に年代別集計で
Warning: ereg_replace() [function.ereg-replace]: REG_BADRPT in /home/sites/chicappa.jp/users/******-******/web/data/class/pages/admin/total/LC_Page_Admin_Total.php on line 552
のエラーが出るようになりました。
私が記述間違いか何かを、したのかもしれません。
参考になるご教授いただけたら助かります。
よろしくお願いいたします

**************
EC-CUBE 2.3.3
PHP 5.2.6
mysql 5.0.51a
*************
nets
投稿日時: 2009/2/28 19:22
対応状況: −−−
新米
登録日: 2008/7/31
居住地: 広島
投稿: 10
Re: 売り上げ集計の会員別集計と職業別集計でのSQLバグ[eccube2.3.3+mysql]
すみませんnetsです。
先ほどのエラー解決いたしました。
data/class/pages/admin/total/LC_Page_Admin_Total.php
の552行目
$arrKey[] = ereg_replace("?", "-", $val);

$arrKey[] = ereg_replace("〜", "-", $val);
になおすだけでした。
大変お騒がせいたしました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン



統計情報

総メンバー数は74,637名です
総投稿数は104,066件です

投稿数ランキング

1
seasoft
7333
2
468
3217
3
AMUAMU
2712
4
nanasess
2202
5
umebius
2078
6
yuh
1664
7
red
1498
8
h_tanaka
1188
9
tsuji
942
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.