我有一个页面,我想在其中显示用户拥有的一项技能的最新值。用户可以具有多种技能。
为此,我有两个表,usr_skills和skill_valuations。 usr_skills列出了用户拥有的所有技能。 skill_valuations显示了用户拥有和拥有的所有技能评估,并且由于添加到表中的值而不断变化。
usr_skills的结构很简单: id,usr_id,skill_id,date_assignment
skill_valuations的结构不同: id,usr_id,skill_id,值,last_change
skill_valuations中的last_change显示何时添加了技能评估。
现在,我想获取有关用户技能的最新条目。正如您在下面的代码中看到的那样,我曾经使用过一种解决方案,到目前为止,它的工作情况还不错。我得到的结果与用户的技能一样多。但是结果不正确。所以我看到我做错了。但是哪里?我怎么了?
SELECT *
FROM usr_skills usk
INNER JOIN
(
SELECT MAX(last_change) last_change, usr_id, skill_id, value
FROM skill_valuations skv
WHERE usr_id = 2
GROUP BY skill_id
)
skv ON skv.skill_id = usk.skill_id AND skv.usr_id = usk.usr_id
WHERE usk.usr_id = 2
GROUP BY usk.skill_id
问题解决了。查看我的回复。
SELECT *
FROM (SELECT
skill_id,
MAX(last_change) lc
FROM skill_valuations
WHERE usr_id = $usid
GROUP BY skill_id)
AS skiv
LEFT JOIN skill_valuations skv ON skiv.lc = skv.last_change
GROUP BY skiv.skill_id
ORDER BY value DESC