あなたは1つの更新SQLクエリでそれを行うことができます。テストテーブルを用意し、クエリを更新してデモンストレーションします。基本的に自分のテーブルで使用するには、テーブル名をTestTableからテーブル名に変更し、「Field」の名前を更新するフィールド名に変更するだけです。
1つのフィールドに複数のhrefリンクがある場合。クエリを複数回実行する必要があります。最初のクエリで、テーブル内の最大リンクオカレンスを見つけることができます。更新クエリを複数回実行するより。使用した一時データをクリアするために1つ多くのクエリを更新するよりもoccurence_countのカウントでクエリを更新すると、
-テーブルで最大のリンクオカレンスを見つけます
SELECT max(cast((LENGTH(Field) - LENGTH(REPLACE(Field, '<a href', ''))) / 7 as unsigned)) AS occurrence_count
FROM TestTable;
--テーブルoccurrence_count回を更新して、すべての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>")
)
;
--すべての更新が終了したら、これを1回実行して、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>");