0

我有一个如下表:

uid nid     points  date                        reason
36  116     2       2012-08-28 11:52:12         session
31  110     2       2012-08-23 15:47:47         session
36  115     2       2012-08-27 11:52:48         session

如您所见,uid 不是唯一的,它可以重复。我需要的是为日期(30 天前)之间的每个 id 选择点总和。例如:uid36 的总和 = 4。 我尝试过的内容:

$start_time = mktime(0, 0, 0, $today["mon"], ($today["mday"] - 30), $today["year"]);//30 days before
$end_time = time();
$query = db_query("SELECT uid,sum(points), date FROM users_history WHERE date BETWEEN '$start_time' AND '$end_time'");

但是如何为每个 id 选择

4

3 回答 3

4

如果您使用聚合函数,您需要GROUP BY uid并且在您的查询中毫无意义。dateSUM

SELECT uid, SUM(points) 
FROM users_history 
WHERE date BETWEEN DATE_SUB(CURDATE(), INTERVAL 30 day) AND NOW() 
GROUP BY uid

如果没有未来的日期,那么你只需要

WHERE date >= DATE_SUB(CURDATE(), INTERVAL 30 day)
于 2012-08-28T09:15:33.313 回答
1

为此,您需要对您的 uid 进行分组。
SELECT uid,sum(points), date FROM users_history WHERE date BETWEEN '$start_time' AND '$end_time'" group by uid;

于 2012-08-28T09:18:14.193 回答
0
SELECT uid, SUM(points) FROM users_history WHERE date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW() GROUP BY uid
于 2012-08-28T09:30:05.497 回答