Mysql if оператор игнорирует первое условие - PullRequest
0 голосов
/ 05 января 2019

У меня есть оператор if в процедуре mysql, подобный этому:

if myQuery like '%فواید%' or myQuery like '%مضرات%' or myQuery like 
'%خواص%' or myQuery like '%عوارض%' then
set  EHSfour= b'1';
end if;

К моему удивлению, я обнаружил, что оператор if выше игнорирует myQuery, например "% %واید%". Он проверяет другие условия и устанавливает EHSfour = 1, когда myQuery is like '%مضرات%' or '%خواص%' or '%عوارض%', но не когда myQuery равен like '%فواید%'.

Почему, черт возьми, MySQL работает так? При каком сценарии mysql может так себя вести?

Версия mysql - 5.7, и я использую верстак mysql 6.3 CE.

обновление: В моем коде у меня есть:

if EHSfour = b'1' then
set myEHSkind = 4;

, а затем:

update new_tbl_health set EHS_kind = myEHSkind where ID = myID;

Вот вся моя процедура:

CREATE DEFINER=`root`@`localhost` PROCEDURE `fillEHSKind`()
BEGIN
declare myEHSkind int default 0;
declare EHSone,EHStwo,EHSthree,EHSfour bit;
declare myID int(11);
declare myQuery varchar(500);
declare v_finished integer default 0;
declare myCursor cursor for select ID,Query from new_tbl_health;
declare continue handler for not found set v_finished = 1;
open myCursor;
myLoop: loop
fetch myCursor into myID,myQuery;
if v_finished = 1 then
leave myLoop;
end if;

set EHSone = b'0';
set EHStwo = b'0';
set EHSthree = b'0';
set EHSfour = b'0';
set myEHSkind = 0;

if myQuery like '%بیمارستان%' or myQuery like '%دکتر%' or myQuery like 
'%پزشک%' then
set  EHSone= b'1';
end if;

if myQuery like '%بیماری%' or myQuery like '%مریضی%'
set EHStwo = b'1';
end if;

if myQuery like '%علایم%' or myQuery like '%نشانه%' or myQuery like 
'%علت%' or myQuery like '%خارش%'  then
set EHSthree = b'1';
end if;

if myQuery like '%فواید%' or myQuery like '%مضرات%' or myQuery like 
'%خواص%' 
or myQuery like '%عوارض%' then
set  EHSfour= b'1';
end if;

if EHSone = b'1' and EHStwo = b'1' and EHSthree=b'1' then
set myEHSkind = 8;
elseif EHSone = b'1' and EHStwo = b'1' then
set myEHSkind = 5;
elseif EHSone = b'1' and EHSthree = b'1' then
set myEHSkind = 6;
elseif EHStwo = b'1' and EHSthree = b'1' then
set myEHSkind = 7;
elseif EHSone = b'1' then
set myEHSkind = 1;
elseif EHStwo = b'1' then
set myEHSkind = 2;
elseif EHSthree = b'1' then
set myEHSkind = 3;
elseif EHSfour = b'1' then
set myEHSkind = 4;
end if;

update new_tbl_health set EHS_kind = myEHSkind where ID = myID;
end loop myLoop;
END

1 Ответ

0 голосов
/ 05 января 2019

Я не использовал if таким образом, но, скорее всего, ваш оператор if влияет только на первую строку, соответствующую условию.

Если вы хотите обновить все строки, соответствующие условию, вы можете попробовать следующее:

update #tableName set EHSfour= b'1' where (myQuery like '%فواید%' or myQuery like '%مضرات%' or myQuery like '%خواص%' or myQuery like '%عوارض%');
...