您可以使用 1 个更新 sql 查询来完成。我为你准备了一个测试表,并更新查询来演示。基本上要在您自己的表格上使用,只需将表格名称从 TestTable 更改为您的表格名称,并将“字段”的名称更改为您要更新的字段名称。
如果您在一个字段中有多个 a href 链接。您需要多次执行查询。您可以通过第一个查询在表中找到最大链接出现次数。比多次执行更新查询。当您更新查询的发生计数而不是更新 1 个查询时,我给了您用于清除我使用的一些临时数据的查询。
-- 查找表中的最大链接出现次数
SELECT max(cast((LENGTH(Field) - LENGTH(REPLACE(Field, '<a href', ''))) / 7 as unsigned)) AS occurrence_count
FROM TestTable;
-- 更新你的表出现次数以替换所有的 a href 链接。
update TestTable
set Field = replace
(
@b:=replace
(
@a:=replace(Field
, substring(Field, Instr(Field, "<a href='"), Instr(Field, "</a>")-Instr(Field, "<a href='")+4)
, replace(substring(Field, Instr(Field, "<a href='"), Instr(Field, "</a>")-Instr(Field, "<a href='")+4), "_", "-")
)
, substring(@a, Instr(@a, "<a href='"), Instr(@a, "</a>")-Instr(@a, "<a href='")+4)
, replace(substring(@a, Instr(@a, "<a href='"), Instr(@a, "</a>")-Instr(@a, "<a href='")+4), "<a href=", "<*a href=")
)
, substring(@b, Instr(@b, "<*a href='"), Instr(@b, "</a>")-Instr(@b, "<*a href='")+4)
, replace(substring(@b, Instr(@b, "<*a href='"), Instr(@b, "</a>")-Instr(@b, "<*a href='")+4), "</a>", "</*a>")
)
;
-- 在所有更新完成后运行一次,以清除 href 链接中的星号。
update TestTable set Field = replace(replace(Field, "<*a href", "<a href"), "</*a>", "</a>")
-- 检查你的桌子
select * from TestTable;
测试台
CREATE TABLE `testtable` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`Field` VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
测试数据
Insert into TestTable (Field) values ("Hello, my name is <a href='http://example.com/joe_smith'>joe smith</a> and I eat pizza with my friend <a href='http://example.com/john_doe'>john doe</a>");
Insert into TestTable (Field) values ("Hello, my name is <a href='http://example.com/joe_smith'>joe smith</a> and I eat pizza with my friend <a href='http://example.com/john_doe'>john doe</a> my friend <a href='http://example.com/john_doe'>jane doe</a>");