0

我正在尝试根据用户拥有的条目数 VS 条目的值 VS 一周内可以拥有的最大条目数来求和用户的积分。

这是一个日志系统。他们每天都会参加他们参与的所有活动。即:骑自行车。他们可以每天记录,但我们只想在每周的每个活动中给他们 X 分。

表格:

积分 - 每天记录每个活动 (valueID) 的条目(日记条目)

价值观 - 包含他们可以选择的所有可能活动

用户 - 保存参与日志的用户

valueID, valueName, value, maxWeekValue
1, Biking, 1, 6

pointID, userID, valueID, date_created
1, 16, 1, 2013-05-19
2, 16, 1, 2013-05-20
3, 16, 1, 2013-05-21
4, 16, 1, 2013-05-22
5, 16, 1, 2013-05-23
6, 16, 1, 2013-05-24
7, 16, 1, 2013-05-25

userID, name
16, Braden

日记:5/19-5/25 = 我每天都骑自行车和记录。我一周最多只能得到 6 分,所以我的总分应该是 6。

我需要一个 SQL 语句,它将按值分组,给出 value*entries if< maxWeekValue 的总和。

我可以在 PHP 中做到这一点。但我知道在 mySQL 中有一种更简洁的方法。

这是我到目前为止所拥有的:

SELECT p.valueID,p.date_created,v.valueName,v.value,v.maxWeekValue,SUM(v.value) as sumd 
FROM `points` AS p 
INNER JOIN `users` AS u ON u.id = p.userID
INNER JOIN `values` AS v ON p.valueID = v.valueID
WHERE p.date_created 
BETWEEN SUBDATE(curdate(), 7) 
AND curdate()

这可以正确计算总和,但没有条件逻辑将其限制为每周的 maxValue。

在我跳过并只使用 PHP 之前,你们中的任何一个 sql 向导都可以提供一些帮助吗?先感谢您!

4

1 回答 1

2

尝试这个:

SELECT p.valueID,p.date_created,v.valueName,v.value,v.maxWeekValue, case when SUM(v.value) < v.maxWeekValue then SUM(v.value) else v.maxWeekValue end as sumd 
FROM `points` AS p 
INNER JOIN `users` AS u ON u.id = p.userID
INNER JOIN `values` AS v ON p.valueID = v.valueID
WHERE p.date_created 
BETWEEN SUBDATE(curdate(), 7) 
AND curdate()
于 2013-06-01T03:04:44.563 回答