Я был шокирован, когда обнаружил конфликт между следующими двумя условиями.
Я пробовал и проверял многими способами, но позже я обнаружил, что последнее 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