У меня был такой запрос:
SELECT `name`, floor(max(score)), skill
FROM
(SELECT k.`name`, s.`name` as skill, *long complex formula* as score
FROM `keywords_skills` ks
JOIN keywords k ON k.id = ks.keyword_id
JOIN skills s ON s.id = ks.skill_id
JOIN jobs_keywords jk ON jk.keyword_id = k.id
WHERE job_id = 87293) t1
GROUP BY `name`
ORDER BY `name` asc
очевидно, я хочу, чтобы 'skill' ссылался на ту же строку, что и max (оценка), но я не знал, как это сделать.Тем не менее, когда я добавляю ORDER BY
к подзапросу примерно так:
SELECT `name`, floor(max(score)), skill
FROM
(SELECT k.`name`, s.`name` as skill, *long complex formula* as score
FROM `keywords_skills` ks
JOIN keywords k ON k.id = ks.keyword_id
JOIN skills s ON s.id = ks.skill_id
JOIN jobs_keywords jk ON jk.keyword_id = k.id
WHERE job_id = 87293
ORDER BY score DESC) t1
GROUP BY `name`
ORDER BY `name` asc
кажется, что все работает отлично!Мой вопрос: я решил свою проблему или просто внедрил ненадежный хак, который будет преследовать меня позже?
РЕДАКТИРОВАТЬ: возможно, мне следовало бы объяснить больше, что я искал:
Ключевые слова и навыки находятся во многих отношениях друг с другом.Я не просто ищу ключевое слово с наивысшим баллом, но навыком с наивысшим баллом для каждого ключевого слова.
Я также подумал, что могу каким-то образом использовать LIMIT 1
(возможно, в подзапросе), но покане думал о том, как это осуществить.