СЛУЧАЙ, КОГДА Множественное условие, работает только после удаления другого - PullRequest
0 голосов
/ 04 ноября 2018

Я был шокирован, когда обнаружил конфликт между следующими двумя условиями.

Я пробовал и проверял многими способами, но позже я обнаружил, что последнее WHEN условие работает только , если удаляется первое .

CASE
    WHEN
        (@cid != '0' OR @cid != '') AND @ftm != '0' AND (@sid != '' OR @sid != '0')
    THEN 
        cls.id = @cid AND fee_tm.id = @ftm AND sec.id = @sid
    WHEN
        (@cid != '0' OR @cid != '') AND @ftm != '0' AND (@sid = '0') AND
    THEN
        cls.id = @cid AND fee_tm.id = @ftm
END

Здесь @cid связано с cls.id , @ftm с fee_time.id и @sid с sec.id

Чтобы быть более понятным и конкретным ,

value `0` means All:

@cid = 0 (All classes),
@sid = 0 (All Sections),
@ftm = 0 (All fee_tm)

value '' (empty) means nothing is selected.
value != 0 and value != '' means user input.

Первое WHEN условие для:

если @cid (class.id), @ftm (fee_time.id), @sid (sec.id), ни один из них не является пустым, ни все

Второе WHEN условие для:

если @cid (class.id), @ftm (fee_time.id), ни один из этих двух не является ни пустым, ни всем (соответствует первому условию) - но разница есть: если @sid (sec.id ) равно 0 (все).

Я пытался объединить оба условия в одно условие, но не могу настроить. Однако это должно работать, не так ли?

My MYSQL CODE WHERE Предложение, как показано ниже

WHERE
    CASE
        WHEN
            @cid = '0' AND @sid = '0' AND @ftm ='0'
        THEN
            cls.id
        WHEN
            @cid = '0' AND @sid = '0' AND @ftm !='0'
        THEN
            fee_tm.id=@ftm
        WHEN
            (@cid !='0' OR @cid !='') AND (@sid !='' OR @sid !='0') AND @ftm !='0'
        THEN
            cls.id=@cid AND sec.id =@sid AND fee_tm.id =@ftm
        WHEN
            (@cid !='0' OR @cid !='') AND (@sid='0') AND @ftm !='0'
        THEN
            cls.id=@cid AND fee_tm.id=@ftm
    END
GROUP BY
    student.id, inv_id.ft_id, cls.id
...