2012-11-03 52 views
0

我正在研究一個WordPress數據庫,並且我需要一些幫助來清理post_content字段。MySQL刪除字段中的所有文本EXCEPT模式

有包含像這樣大約5000帖子:
RANDOM JUNK<img src="http://domain.tld/randomString.jpg" />MORE RANDOM JUNK

RANDOM JUNK<img src="http://domain.tld/randomString.png" />MORE RANDOM JUNK

RANDOM JUNK<img src="https://domain.tld/randomString.jpg" />MORE RANDOM JUNK

RANDOM JUNK<img src="https://domain.tld/randomString.png" />MORE RANDOM JUNK

我需要刪除除圖像以外的所有內容,並且在某些字段中可能還有其他HTML標記。

SQL初學者應該從哪裏開始?

+0

您使用哪種後端語言? – ChaosClown

+0

我已經添加了一個答案,表明這可能只使用MySQL,假設這是你的數據庫。我在我的WordPress博客上使用它來刪除和展開所有[gallery]標籤。 –

回答

0

這是不可能與SQL。 SQL可以找到一個正則表達式並告訴它,但不捕獲它的一部分並再次插入它。

您需要先查詢所有圖像,然後匹配您不會忽略然後再插入......

$sql = "SELECT postid, image FROM posts"; 
$result = mysql_query($sql) OR die(mysql_error()); 

while($row = mysql_fetch_assoc($result)) { 
    preg_match('/<img[^>]+>/i', $row['image'], $matches); 
    $sql = "UPDATE posts SET image = '".$matches[0]."' 
      WHERE postid = ".$row['postid']; 
    mysql_query($sq) OR die(mysql_error()); 
} 
+0

我認爲可能是這種情況。感謝您的確認。 –

0

你可以做到這一點,假設你想保持「IMG」標籤是有點獨特。使用SUBSTRING_INDEX

update posts set post_content = 
concat(
    SUBSTRING_INDEX(post_content,'<img src="http://domain.tld/',1) , 
    SUBSTRING_INDEX(post_content,'.jpg" />',-1) 
) 

只保留你想要的'img'標籤。

相關問題