42 lines
1.2 KiB
MySQL
42 lines
1.2 KiB
MySQL
|
|
-- list_exercises mit skill_min_level / skill_max_level: EXISTS auf exercise_skills mit numerischem Stufen-Rang.
|
||
|
|
-- Ausdruck muss mit backend/routers/exercises.py _EXERCISE_SKILL_LEVEL_RANK_SQL (Alias „es“) übereinstimmen.
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_exercise_skills_exercise_level_rank
|
||
|
|
ON exercise_skills (
|
||
|
|
exercise_id,
|
||
|
|
(CASE COALESCE(
|
||
|
|
NULLIF(TRIM(LOWER(target_level::text)), ''),
|
||
|
|
NULLIF(TRIM(LOWER(required_level::text)), '')
|
||
|
|
)
|
||
|
|
WHEN 'basis' THEN 1
|
||
|
|
WHEN 'grundlagen' THEN 2
|
||
|
|
WHEN 'aufbau' THEN 3
|
||
|
|
WHEN 'fortgeschritten' THEN 4
|
||
|
|
WHEN 'optimierung' THEN 5
|
||
|
|
WHEN 'einsteiger' THEN 1
|
||
|
|
WHEN 'experte' THEN 5
|
||
|
|
WHEN '1' THEN 1
|
||
|
|
WHEN '2' THEN 2
|
||
|
|
WHEN '3' THEN 3
|
||
|
|
WHEN '4' THEN 4
|
||
|
|
WHEN '5' THEN 5
|
||
|
|
ELSE NULL END)
|
||
|
|
)
|
||
|
|
WHERE (CASE COALESCE(
|
||
|
|
NULLIF(TRIM(LOWER(target_level::text)), ''),
|
||
|
|
NULLIF(TRIM(LOWER(required_level::text)), '')
|
||
|
|
)
|
||
|
|
WHEN 'basis' THEN 1
|
||
|
|
WHEN 'grundlagen' THEN 2
|
||
|
|
WHEN 'aufbau' THEN 3
|
||
|
|
WHEN 'fortgeschritten' THEN 4
|
||
|
|
WHEN 'optimierung' THEN 5
|
||
|
|
WHEN 'einsteiger' THEN 1
|
||
|
|
WHEN 'experte' THEN 5
|
||
|
|
WHEN '1' THEN 1
|
||
|
|
WHEN '2' THEN 2
|
||
|
|
WHEN '3' THEN 3
|
||
|
|
WHEN '4' THEN 4
|
||
|
|
WHEN '5' THEN 5
|
||
|
|
ELSE NULL END) IS NOT NULL;
|