AR中STAT relation的统计定义 [ 求助交流 ]
大家好, 今天做一个树状结构的统计报表搞不定,特来咨询
有3个表,user,user_agent,log: user存用户记录,user_agent存所有上下级关系(类似phpcms 中的parentarr,不过是拆分成多条记录而已),log存用户财务日志,表定义如下
user(
id
agent_id //直接父级
username ....
)
user_agent(
parent_id
user_id
distance //上下级距离,
)
fund_log(
user_id, // whom is this log belongs
type,
amount,
)
例如A添加代理商是B,B添加代理商C,那么user_agent表中,会有以下代理商关系记录,分别是 parent_id user_id distance A.id B.id 1 B.id C.id 1 A.id C.id 2
那么问题来了,如何在User模型中定义统计A所有代理商的总财物金额呢?
尝试使用STAT定义如下
class User extends CActiveRecord{
public function relations(){
return array(
'fund_report' => array(self::STAT, 'FundLog', '{{user_agent}}(agent_id, user_id)',
'select' => 'SUM(fund_report.amount)',
'condition' => '`type` = 1',
),
);
}
}
产生的SQL是
SELECT SUM(fund_report.amount) AS `s`, //fund_report是故意写错,产生的SQL会打印出来
`lt_user_agent`.`agent_id` AS `c0`
FROM `lt_fund_log` `t`
INNER JOIN `lt_user_agent` ON (`t`.`id`=`lt_user_agent`.`user_id`) // 这里应该是t.user_id 才是正确的业务需求
WHERE (TYPE = 1)
GROUP BY `lt_user_agent`.`agent_id` HAVING (`lt_user_agent`.`agent_id`=36)
如何才能设置INNER JOIN 这里主表使用 user_id来连表呢?
syncake
注册时间:2014-09-23
最后登录:2015-05-11
在线时长:1小时18分
最后登录:2015-05-11
在线时长:1小时18分
- 粉丝0
- 金钱40
- 威望0
- 积分50