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 = to 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 に答える