2013-09-22 44 views
0

我想更新表中的特定字符串,但字符串本身有變量。所以,在更新語句中使用通配符

https://www.youtube.com/watch?v=examplevideo 

「examplevideo」是,我想在

<iframe width="420" height="315" src="https://www.youtube.com/embed/examplevideo"></iframe> 

保留用於替換字符串變量string是有辦法在一個更新語句來做到這一點?

所以,表看起來像這樣;

select messageid,userid, subject, message from feed_messages; 
+-----------+--------+-------------+--------------------------------------------------------------------+ 
| messageid | userid | subject  | message               | 
+-----------+--------+-------------+--------------------------------------------------------------------+ 
|  74 |  67 | Test  | message               | 
|  75 |  67 | Test  | message               | 
|  77 |  67 | Test  | message               | 
|  78 |  67 | Test  | message               | 
|  90 |  70 | How are ya? | message               | 
|  106 |  67 | Test  | message               | 
|  107 |  67 | Test  | message               | 
|  117 |  67 | Test post | Here's a test post; 

https://www.youtube.com/watch?v=GWqD7GyJBVM | 
+-----------+--------+-------------+--------------------------------------------------------------------+ 

我想保留messageid 117的消息字段中的所有內容,但修改鏈接以便視頻在發佈時嵌入。

+0

Mysql ??猜你想到一些dom操作,例如javascript? – davidkonrad

+0

你能告訴我們你到目前爲止的代碼嗎?現在,你甚至不清楚你想要做什麼,更不用說你在哪裏停滯不前。 – IMSoP

+0

我已經更新了原始問題並提供了更多信息。 – Kimomaru

回答

1

不幸的是,即使與REPLACE()結合使用,MySQL的本機REGEXP表達式也不足以完成您想要的功能。

在純粹的MySQL中,除非您使用this set of user-defined functions (UDFs) for MySQL爲MySQL語句實現高級正則表達式功能,例如組捕獲(這是您需要的),否則這並不容易。

如果你能夠安裝這些的UID,那麼你可以使用以下命令:

UPDATE `feed_messages` SET 
    `message` = REGEXP_REPLACE(
    `message`, 
    'https?://www\.youtube\.com/watch\?v=([a-zA-Z0-9-_]{11})[a-zA-Z0-9-_%&=]*', 
    '<iframe src="https://www.youtube.com/embed/$1"></iframe>') 
WHERE 
    `message` REGEXP 'youtube\.com/watch\?v=[a-zA-Z0-9-_]{11}'; 

如果你不能夠使用這些的UDF,那麼這將非常必須的之外完成數據庫。例如,在PHP中:

$query = 'SELECT `messageid`,`userid`,`subject`,`message` FROM `feed_messages`'; 
$msgs = $mysqli->query($query); 
while ($row = $msgs->fetch_assoc()) { 
    echo preg_replace(
    $row['message'], 
    '/https?://www\.youtube\.com/watch\?v=([a-zA-Z0-9-_]{11})[a-zA-Z0-9-_%&=]*/im', 
    '<iframe width="420" height="315" src="https://www.youtube.com/embed/$1"></iframe>') 
} 

希望這有助於!

0

您可以使用SUBSTRING_INDEX來確定字符串'https://www.youtube.com/watch?v='的位置,然後再次獲取下一個空格的位置。有了這兩個位置,您可以提取視頻ID,並結合Leonid的替換和CONCAT插入打開和關閉iframe標籤。

+0

好的,請選擇substring_index('https://www.youtube.com/watch?v=','.'.3);獲取第一部分,但是如何在鏈接結束後使用它來查找第一個空格? – Kimomaru