2013-12-23 49 views
1

我有一個包含大量文本的TEXT字段,在某些時候我有== Gallery == Random text ==Source==MySQL字符串動態替換

我想知道是否有一種方法可以替代== Gallery == Random Text沒有(只是刪除)只有MySQL?

目前此更新

update `wiki_article_revisions` 
set `opcode` = replace(`opcode`, '== Gallery == ==Sources==', ''); 

工作,但我不能找到一種方法來檢測這兩個文本片段之間的隨機文本。

+0

你使用MySQL和PHP? – rullof

+0

是的,但我正在尋找一個MySQL解決方案,因爲這隻會手動完成一次我的表中的所有內容,性能不會是一個問題。 – CGeorges

+0

你想刪除從== Gallery ==到== Sources ==的所有文本嗎? – rullof

回答

0

您可以手動構造的字符串,是這樣的:

select concat(left(val, locate('== Gallery == ', val) - 1), 
       substring(val, locate('==Source==', val) + 10) 
      ) 

這假定分隔符各只是整個字符串中出現一次。

作爲update這將是:

update `wiki_article_revisions` 
    set `opcode` = concat(left(opcode, locate('== Gallery == ', opcode) - 1), 
          substring(opcode, locate('==Source==', opcode) + 10) 
         ); 
0
UPDATE wiki_article_revisions 
SET opcode = REPLACE(opcode,SUBSTRING_INDEX(opcode,'==',3),'') 

SQL Fiddle

假設==實例是對人等於 rows.If你只想隨機文本L:

UPDATE wiki_article_revisions 
SET opcode = (SUBSTRING_INDEX(SUBSTRING_INDEX(opcode,'==',3),'==',-1)) 

SQL Fiddle

1

你不能有MySQL中沒有的功能支持與正則表達式(How to do a regular expression replace in MySQL?)更新。你必須將內容加載到一個字符串,然後performe一個PHP正則表達式替換字符串用PHP刪除randome文本與新內容的更新:

<?php 

$con = mysqli_connect("localhost","username","password","db_name"); 
$result = mysqli_query($con,"SELECT * FROM wiki_article_revisions"); 

$regex = '/(\(== gallery ==\))([^\0]*)(\(== source ==\))/'; 

while($row = mysqli_fetch_array($result)) 
{ 
    preg_replace($regex, "$2", $row['opcode']); 
    $mysqli_query("UPDATE wiki_article_revisions SET opcode=" . $row['opcode'] . "WHERE id=" . $row['id']); 
} 

?>