我在mysql过程中有这样一个if语句:
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 workbench 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条答案
按热度按时间q7solyqu1#
我没有以这种方式使用if,但是很可能,if语句只影响与条件匹配的第一行。
如果要更新与条件匹配的所有行,可以尝试以下操作: