【发布时间】:2017-12-07 06:40:17
【问题描述】:
我需要帮助来制定一个查询以根据用户操作计算积分。 有一个存储用户信息的用户表,每个用户属于一个特定的类别(用户类别)。每个类别都有不同的级别(比如 level1、level2 等),每个级别都有一组要完成的任务(Task1、Task2...)。每个任务都可以执行多次。但积分是根据最大限制字段计算的。
任务 1 - 10 分(最多:2 - 表示用户可以执行此任务 N 次,但对于积分计算,它只会计算两次)
任务 2 - 5 分(最高:1)
例如,假设 User1 执行 Task1 5 次,但对于积分计算,Task1 只会计算 2 次,因此总积分为 20。这对于所有任务都是相似的。
在完成每项任务后,用户将获得 N 分并升级到下一个级别。 请在下面找到表结构和查询:
用户
uid、uname、uc_id(引用用户类别)、ul_id(引用用户级别,表示当前用户级别)
用户类别
uc_id ....
用户级别
ul_id, uc_id(参考用户类别) ...
level_tasks
lt_id , ul_id (参考用户级别) , lt_point, lt_max
user_tasks
ut_id、lt_id(参考级任务)、uid(参考用户)
以下是我迄今为止尝试过的查询:
SELECT uid, SUM(LT.lt_point/LT.lt_max) as TotalLevelPoints
FROM users AS U
INNER JOIN user_tasks AS UT ON UT.ut_user_id = U.id
INNER JOIN level_tasks AS LT ON LT.lt_id = UT.lt_id
INNER JOIN user_level AS UL ON UL.ul_id = LT.ul_id
INNER JOIN user_category AS UC ON UC.uc_id = UL.uc_id
WHERE UT.ut_status = 1 AND U.uid = 1 AND UL.ul_id = 1
GROUP BY U.uid
这给出了所有的总和而不考虑最大限制,我应该如何编写以便在该列上计算总和。 希望我的问题足够清楚.. 任何帮助将不胜感激。
【问题讨论】: