我有一組關鍵字,我想在表中任何一個列的表中進行更改。所以有一個主表和關鍵字表,它有兩列:要找到的關鍵字和要改變的關鍵字。因此,例如,有一排REGEXP基礎替換不在MySQL中工作過程
findtxt repltxt 有限公司$ LIMITED
然後我有報價的重要組成部分的程序如下:
DECLARE cur1 CURSOR FOR SELECT findtxt,repltxt FROM keywords ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
SET done = 0;
OPEN cur1;
myLoop: LOOP
FETCH cur1 INTO ftxt,rtxt;
IF done = 1 THEN
LEAVE igmLoop;
END IF;
SET @t1 = CONCAT('UPDATE ',tbl,' SET ',sanecol,' = REPLACE(',sanecol,',?,','?) WHERE ',sanecol,' REGEXP ?');
PREPARE stmt FROM @t1;
SET @ftxt = ftxt;
SET @rtxt = rtxt;
EXECUTE stmt USING @ftxt,@rtxt,@ftxt;
DEALLOCATE PREPARE stmt;
END LOOP myLoop;
CLOSE cur1;
sanecol和TBL作爲傳遞參數放入代表要更改的列的過程和具有列的表中。
此過程貫穿所有記錄循環(我知道,因爲它需要一段時間),但沒有任何錯誤結束。然而,這些關鍵字並未改變(例如LTD不會成爲有限公司。)
我在做什麼錯?
我已經測試通過
SET @t2 = CONCAT('UPDATE ',tbl,' SET idd = 1 WHERE ',sanecol,' REGEXP ?');
哪裏IDD是剛剛建立,以確保在REGEXP正在測試標誌,以找出問題。這的確是通過與LIM或LTD每條記錄的IDD列設置爲1
所以這個問題真的是與代碼的這一部分:
CONCAT('UPDATE ',tbl,' SET ',sanecol,' = REPLACE(',sanecol,',?,','?)
替換隻是不工作。在表
樣本數據來代替
id replacecol
1 FOREVER UNITED LTD
2 APPLE DEVICES LIMITED
3 QUICKFIX DESIGNS LIM
4 FINANCIAL TIMES LTD
這應該更改爲:
id replacecol
1 FOREVER UNITED LIMITED
2 APPLE DEVICES LIMITED
3 QUICKFIX DESIGNS LIMITED
4 FINANCIAL TIMES LIMITED
我懷疑你根本問題在於您將關鍵字存儲爲分隔列表,而不是將每個關鍵字排成一行。 –
它在一張桌子上:我已編輯添加屏幕截圖。 – user1729972
你認爲會發生一個像'BEAUTI SLIM'這樣的名字嗎?也許'BEAUTI SLIMITED'? –