2015-10-15 47 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