我试图在上个月获得用户总数和总数,是否可以在一个查询中获取?我使用zend,但我可以使用提供的sql。
继承了我上个月的总数
$select = $this->_db
->select()
->from(array('p' => $this->_name), array(
'user_login',
'sum' => new Zend_Db_Expr('SUM(p.value)'),
)
)
->joinLeft(array('u' => 'user'), 'p.user_login = u.login')
->group('p.user_login')
->where('DATE(when) >= CURDATE() - INTERVAL 30 DAY')
->order('sum DESC')
;
return $this->getAdapter()->fetchAll($select);
答案 0 :(得分:1)
根据我的理解,您希望显示过去30天的总数以及每个用户的所有时间总数;遗憾的是,我无法测试Zend语法,并且我不习惯它,但这里是MySQL所需SQL的一个版本;
SELECT p.user_login,
SUM(IF(DATE(`when`) >= CURDATE() - INTERVAL 30 DAY,p.value,0)) sum,
SUM(p.value) total_sum
FROM user_value p
JOIN user u
ON u.login = p.user_login
GROUP BY p.user_login
ORDER BY sum DESC;
答案 1 :(得分:0)
我相信你的初始查询等同于这个SQL:
SELECT p.user_login, SUM(p.value) as sum_last_month
FROM person p
LEFT JOIN user u ON p.user_login = u.login
WHERE DATE(when) >= CURDATE() - INTERVAL 30 DAY
GROUP BY p.user_login
ORDER BY sum_last_month DESC
我不确定如何使用Zend做这样的嵌套SELECT,但是在SQL中我相信这样的东西会起作用:
SELECT p.user_login, SUM(p.value) as sum_last_month,
(SELECT SUM(p2.value) FROM person p2 WHERE p2.id = p.id) as total
FROM person p
LEFT JOIN user u ON p.user_login = u.login
WHERE DATE(when) >= CURDATE() - INTERVAL 30 DAY
GROUP BY p.user_login
ORDER BY sum_last_month DESC, total DESC