2015-10-15 95 views
0

我想弄清楚如何筛选我的输出为“组合”的情况。我的前两个陈述效果很好,并让我获得我想要的课程(例如,在滑雪者的能力水平上的滑雪板课程+未分级的私人课程)。我的第三条语句(inPreferredLessonType = 3,即滑雪板或滑雪板)无法正确过滤输出设置 - 我将获得任何滑雪板课程或滑雪课程,其各种能力水平与滑雪者的两个(单独存储的)能力水平。不是正确的想法,并且让用户感到困惑。MySQL复杂当过滤器与案例

我想要的只是在滑雪者的滑雪板能力级别上滑雪板课程+在滑雪者的滑雪能力级别上的滑雪课程+未分级的私人课程。请帮忙!

(... SELECT语句的其余部分...)

CASE 
WHEN inPreferredLessonType = 1 
    THEN program.nBool_isSnowboard = 0 AND 
(program.n_ability_level = inSkiAbilityLevel OR program.n_ability_level = 0) 

    WHEN inPreferredLessonType = 2 
    THEN program.nBool_isSnowboard = 1 AND 
(program.n_ability_level = inSnowboardAbilityLevel OR program.n_ability_level = 0) 

    WHEN inPreferredLessonType = 3 
    THEN program.n_ability_level = inSkiAbilityLevel 
     OR program.n_ability_level = inSnowboardAbilityLevel 
     OR program.n_ability_level = 0 
END 

(...过滤器语句,ORDER BY等的其余部分)

+0

是否在'WHERE'子句中检查条件? – ydoow

+0

是的,非常复杂的WHERE子句,我没有在这里包含它,因为我已经调试了其余的东西。 –

+0

'WHEN inPreferredLessonType = 3 \t THEN(program.nBool_isSnowboard = 0 AND program.n_ability_level = inSkiAbilityLevel) \t \t \t OR \t \t(program.nBool_isSnowboard = 1 AND program.n_ability_level = inSnowboardAbilityLevel) \t \t \t OR \t \t \t program.n_ability_level = 0' –

回答

0

原来我只是需要在括号条件和过滤到滑雪和滑雪板的能力水平。

WHEN inPreferredLessonType = 3 
     THEN (program.nBool_isSnowboard = 0 AND program.n_ability_level = inSkiAbilityLevel) 
      OR 
      (program.nBool_isSnowboard = 1 AND program.n_ability_level = inSnowboardAbilityLevel) 
      OR 
      program.n_ability_level = 0