我的大脑开始因为这个问题而受伤,我希望得到一些指导。我试图从这个查询中得到三个值:attendancescore、lootscore和totalscore(attendancescore-lootscore)。
出勤率通过三个表进行跟踪: attendance
, attendancelog
,和 attendancevalues
. attendance
记录附加到 attendancelog
记录。出席的类型有“出席”、“错过”和“叫出”等。 attendancelog
是父记录,记录事件类型、标题和日期,以及记录出勤的人员和时间。 attendancevalues
是与出勤率匹配的配置表 type
从 attendance
以及事件 type
从 attendancelog
并返回一个可配置的 value
浮动。
战利品通过两个表进行跟踪: loot
以及 loottypes
. loot
记录每个单独的项目,谁收到它,什么时候和什么 type
战利品(主要,次要,免费)。 loottypes
是一个采用 type
从 loot
并返回一个可配置的 cost
浮动。
经过一段时间的工作之后,我提出了一个工作查询 attendanceScore
以及 lootScore
:
SELECT
(SELECT SUM(t3.`value`)
FROM `attendance` t1
INNER JOIN `attendancelog` t2
ON t2.`id` = t1.`attendancelog_id`
INNER JOIN `attendancevalues` t3
ON t3.`eventtype_id` = t2.`type` AND t3.`attendancetype_id` = t1.`type`
WHERE t1.`user_id` = 3) as attendanceScore,
(SELECT SUM(t2.`cost`)
FROM `loot` t1
INNER JOIN `loottypes` t2
ON t2.`id` = t1.`type`
WHERE t1.`user_id` = 3) as lootScore
我知道这不管用,但我想补充一点 (attendanceScore - lootScore)
但它表示这些字段不可用。这就是我最终需要完成的查询。
我可以通过将每个子查询直接复制到 (attendanceScore - lootScore)
但这绝对是可怕的,而且我确信没有必要:
SELECT
(SELECT SUM(t3.`value`)
FROM `attendance` t1
INNER JOIN `attendancelog` t2
ON t2.`id` = t1.`attendancelog_id`
INNER JOIN `attendancevalues` t3
ON t3.`eventtype_id` = t2.`type` AND t3.`attendancetype_id` = t1.`type`
WHERE t1.`user_id` = 3) as attendanceScore,
(SELECT SUM(t2.`cost`)
FROM `loot` t1
INNER JOIN `loottypes` t2
ON t2.`id` = t1.`type`
WHERE t1.`user_id` = 3) as lootScore,
(
(SELECT SUM(t3.`value`)
FROM `attendance` t1
INNER JOIN `attendancelog` t2
ON t2.`id` = t1.`attendancelog_id`
INNER JOIN `attendancevalues` t3
ON t3.`eventtype_id` = t2.`type` AND t3.`attendancetype_id` = t1.`type`
WHERE t1.`user_id` = 3) - (SELECT SUM(t2.`cost`)
FROM `loot` t1
INNER JOIN `loottypes` t2
ON t2.`id` = t1.`type`
WHERE t1.`user_id` = 3)
) as totalScore
有没有人能帮我弄明白用什么方法把这些东西清理成更精简、更高效的东西?
1条答案
按热度按时间olqngx591#
可以使用内联视图