我需要帮助来制定查询以基于用户操作来计算点。有一个用户表,其中存储用户信息,每个用户都属于一个特定的类别(用户类别)。每个类别都有不同的级别(例如,level1,level2等。),每个级别都有一组要完成的任务(Task1,Task2 ...)。每个任务可以执行多次。但是,积分是根据最大限制字段计算的。
任务1-10分(最多2分-意味着用户可以执行此任务N次,但对于点数计算仅计两次)
任务2-5分(最多1分)
例如,假设User1执行5次Task1,但是对于点数计算Task1仅计2次,因此总点数为20。这对于所有任务都是相似的。
在完成每个任务时,用户获得N点并升级到下一个级别。请在下面的表结构中查找并查询:
uid,uname,uc_id(引用用户类别),ul_id(引用用户级别并指示当前用户级别)
uc_id ....
ul_id,uc_id(参考用户类别)...
lt_id,ul_id(参考用户级别),lt_point,lt_max
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
这给出了所有总和,而没有考虑最大限制,我应该怎么写,以便总和也可以在该列上计算。希望我的问题很清楚..任何帮助将不胜感激。
我相信您将需要分两步执行此操作。首先求和,然后与每种任务类型允许的最大值进行比较。确定后,将每个用户的结果相加。例如
SELECT
u.uid
, SUM(user_task_points) AS user_task_points
FROM users AS u
INNER JOIN (
SELECT
ut.UT_user_id
, lt_id
, lt.LT_point
, lt.LT_max_times
, CASE WHEN SUM(lt.LT_point) > (lt.LT_point * lt.LT_max_times) THEN (lt.LT_point * lt.LT_max_times)
ELSE SUM(lt.LT_point)
END AS user_task_points
FROM user_tasks AS ut
INNER JOIN level_tasks AS lt ON ut.UT_rule_id = lt.LT_id
INNER JOIN user_level AS UL ON UL.ul_id = LT.ul_id
WHERE ut.UT_status = 1
AND ut.UT_user_id = 1
AND ul.ul_id = 1
GROUP BY
ut.UT_user_id
, lt_id
, lt.LT_point
, lt.LT_max_times
) AS p ON u.id = p.UT_user_id
GROUP BY
u.uid
;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句