ECstore后台报表的会员排行一直存在一个bug,统计的会员销售数据是翻倍(订单数量和金额比实际的多了一倍)。
修复方法:
修改 app\b2c\model\analysis\member.php,
将getlist方法中的:
$sql = 'SELECT 1 as rownum,login_account,count(1) as saleTimes,sum(O.payed) as salePrice FROM '.kernel::database()->prefix.'b2c_orders as O LEFT JOIN '.kernel::database()->prefix.'pam_members as M on O.member_id=M.member_id where (O.payed>0) and '.$this->_filter($filter).' Group By M.member_id';
修改为:
$sql = 'SELECT 1 as rownum,M.member_id,count(1) as saleTimes,sum(O.payed) as salePrice FROM '.kernel::database()->prefix.'b2c_orders as O LEFT JOIN '.kernel::database()->prefix.'b2c_members as M on O.member_id=M.member_id where (O.payed>0) and '.$this->_filter($filter).' Group By M.member_id';
并在:“$this->tidy_data($rows,$cols);”前面新增如下代码:
//取出会员用户名 $pamMdl = app::get('pam')->model('members'); if ($rows){ foreach($rows as $k=>$v){ $v['login_account'] = $pamMdl->get_operactor_name($v['member_id']); $rows[$k] = $v; } }
报表显示正常了:
究其原因,是因为统计的sql语句中,是根据sdb_pam_members表统计的, 但是member_id在这个表中,是存在两条记录的(一条记录是用户名登录local,一条记录是邮箱登陆email):